您的位置:首页 > 理论基础 > 计算机网络

Android网络编程之下菜单系统中的真机调试问题小结

2013-05-20 16:44 429 查看
下单系统的几个主要功能模块经过了模拟器的调试之后,我们连接了真机(小米2)进行调试,又发现了不少问题,经过一番排查逐一解决掉了,遂在此做一个小结。

1. 仍然是Android3.0以上系统主UI线程不能使用网络操作问题,我们加上下面2段代码即可,但这只是权宜之计,真正的解决办法是把所有网络操作放入线程中进行

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().penaltyLog()
.penaltyDeath().build());


2. 服务器直接传回中文信息时,客户端显示乱码问题

解决办法:HttpUtil类中负责获得响应实体的方法参数中(无论Get与Post方式)附上编码格式,像这样:

// 判断是否请求成功
if (response.getStatusLine().getStatusCode() == 200) {
// 获得响应
result = EntityUtils.toString(response.getEntity(), "gbk");
return result;


3. 客户点菜时,输入中文备注,传到服务器端数据库中变为乱码问题:

解决办法:在OrderDetailServlet的doGet方法中先设置request的编码格式:

req.setCharacterEncoding("utf-8");


且将JDBC获取数据库连接的url地址后附加如下参数:

url=jdbc:mysql://localhost:3306/wireless_db?useUnicode=true&characterEncoding=utf-8


即可正常向MySQL插入中文数据。

4. 查询订单明细时,中文传回客户端WebView中显示乱码问题:

解决办法:让WebView使用loadDataWithBaseURL()方法加载html格式的String,并且编码要设为utf-8

PayActivity.this.showOrderWebView.loadDataWithBaseURL(null, resultHtml, "text/html", "utf-8", null);


注:如果是模拟器的话,我们可以这样加载:

PayActivity.this.showOrderWebView.loadData(resultHtml, "text/html", "gbk");


并且客户端的html头部需要有编码格式声明:

<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">


(经测试,真机调试无需此头部元数据的声明)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐