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

下单系统的几个主要功能模块经过了模拟器的调试之后,我们连接了真机(小米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\">

(经测试,真机调试无需此头部元数据的声明)

原文地址:https://www.cnblogs.com/moka/p/3088860.html