Android Webview posturl 传参被encode问题
1、起因,闲话少说,近期因项目需求,需要在webview必须通过post方式加载url并传参,自然想到posturl(url,byte[])
2、问题,起初很简单,JSON拼接参数,然后转String,最后String.getBytes(),自然得到了byte[],服务器也很顺利接收到了,可是呢顺利的话应该是一个正常的json串,直接解析就能得到数据,服务端接收到的json串被encode了,例如{}、""等都被encode了,本来呢直接decode也可以解决,偏偏IOS端是正常的,想办法。
3、解决问题,途径1:通过httpPost将数据post上去,再接收httpresponse,最后拿到response的数据放到webview去加载,前期post跟接收response轻易解决,但是偏偏在解析response加载到webview的时候又出现问题,试着debug调试,未果,索性研究其他办法。
途径2:还是webview.posturl,区别在于得到json串以后不直接转String,而是通过StringEntity,详情见以下代码StringEntity se = null; try { se = new StringEntity(jsonObject.toString(),"UTF-8"); se.setContentType("application/json"); byte[] array = EntityUtils.toByteArray(se); webView.postUrl(url, array); } catch (Exception e) { e.printStackTrace(); }
途径3:重写 webview 的 shouldInterceptRequest,针对特定请求修改请求头,详见以下代码@Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { try { if (url.equals("http://192.168.0.12:8080/tt.php")) { URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "application/json"); String data = "{\"name\":\"test\"}"; conn.getOutputStream().write(data.getBytes()); WebResourceResponse resp = new WebResourceResponse("text/html", conn.getHeaderField("encoding"), conn.getInputStream()); return resp; } }catch(Exception e){} return super.shouldInterceptRequest(view, url); }
为了方便测试,在本机搭了个简单的服务器,直接生成一个servlet,修改web.xml映射,保证手机电脑在一个网段,在手机端直接访问电脑ip/projectname/servlet映射名称,例如 192.168.0.123/ServerDemo/myServlet,在servlet的dopost方法中解析就可以看到在安卓端webview通过post传递的参数
Android Webview posturl 传参被encode问题相关推荐
- android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案
我们在开发需求的时候,难免会接入一下第三方的H5页面,有些H5页面是具有上传照片的功能,Android 中的 WebView是不能直接打开文件选择弹框的 接下来我讲简单提供一下解决方案,先说一下思路 ...
- uniapp给webview进行传参。
uniapp 页面操作 webview页面操作 onshow(){ getQuery(name) { // 正则:[找寻'&' + 'url参数名字' = '值' + '&']('&a ...
- 前端h5与 android/ios 交互传参
介绍 前端 与 Android/iOS 交互的代码.(双方要约定一个公用的方法) 1.与Android交互 ① 前端 调用 Android 的方法,这里将约定的方法名为:HtmlToAndroid w ...
- webview传参给Android,webview 向Android传参
订单页面是webview,但是支付页面是客户端做,所以要在去付款的标签上onclick js传参. function OrderPay(order_id,pay_type,pay_account_id ...
- Android APP跳转微信小程序和APP跳转支付宝小程序传参
Android APP跳转微信小程序和APP跳转支付宝小程序传参 微信开放文档链接 MINIPROGRAM_TYPE_PREVIEW:体验版. MINIPROGRAM_TYPE_TEST:开发版 MI ...
- android使用webview上传文件,Android项目中如何在webview页面中上传文件
Android项目中如何在webview页面中上传文件 发布时间:2020-11-26 15:56:27 来源:亿速云 阅读:68 作者:Leah 本篇文章为大家展示了Android项目中如何在web ...
- Android WebView 支持H5图片上传input type=file
2019独角兽企业重金招聘Python工程师标准>>> Android WebView 缓存处理 Android WebView 支持H5图片上传<input type=&qu ...
- vue 返回上一页传参_H5页面与微信小程序相互跳转并传参(web-view)
H5页面用vue2.全家桶写的. 一.vue代码编写vue中路由的编写 1)vue init webpack test 2)/src/router/index.js中引入路由组件 import Ind ...
- Android通过adb命令传参给APP的方法
老套路先看图 说下原理: 使用adb命令启动server然后传递参数,service拿到参数后可以根据需求实现模拟控制APP 看代码 package cn.yhsh.adbinputserver.se ...
- Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期
按键响应的第一种方式: 在XML文件里面设置按键的onClick绑定函数.就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这 ...
最新文章
- 机器学习算法与理论用到的数学知识
- 华为python工程师工资-华为工程师对Python编程的看法
- php将soap返回的xml转成数组,PHP – 在PHP中将XML转换为数组 – 在php中解析soap xml并将其存储在数据库中...
- spark任务shell运行_了解Spark 应用的一生
- C# Socket的粘包处理(转)
- 数据分析师如何正确的提意见?(文末赠书)
- aix系统java堆_浅谈AIX环境下的Java性能调优
- 引用数据类型的方法调用
- jquery 序列化表格内容为字符串(serialize)
- leetcode 96. 不同的二叉搜索树(Unique Binary Search Trees)
- 网络 计算机网络预备知识
- 零基础如何入门MATLAB(适用于所有编程语言)?(建议收藏)
- 谷歌金山词霸正式发布--免费午餐越来越多
- WiFi之WL工具命令
- 级数 p级数 q级数 调和级数为什么叫做“调和”级数 等比数列求和公式和等差数列求和 斜率:
- 优化网站提高打开速度
- 健身服务公司iFIT赴美上市,64亿美元估值中藏着“喜”与“忧”?
- 逆水寒江湖无限服务器等级,逆水寒上限多少级 逆水寒等级上限是多少
- 【抓包】【Mac Charles】局域网无法抓包 手机热点来解决
- js控制excel打印完美解决方案(转)
热门文章
- 9.4.3 BINARY与VARBINARY类型
- JAVA HD japan_小米小爱AI音箱HD【硬件分析】,你了解智能音箱吗
- 【FeignClient报错】Cannot deserialize value of type``from Object value (token `JsonToken.START_OBJECT`)
- linux面试基础考题
- SQL server置疑数据库修复
- 乐优商城服务器部署_黑马乐优商城项目总结
- 西南科技大学OJ题 带权无向图存储判定1064
- npy文件的保存与读取
- 微信小程序的民宿客房预订uniapp小程序
- [ 物联网篇 ] ESP32 AWS IoT and Amazon Alexa Development / FreeRTOS平台的Alexa语音助手