zoukankan      html  css  js  c++  java
  • 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\">

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

  • 相关阅读:
    ES6 变量的解构赋值
    【js重学系列】new
    【js面试系列】手写常见js方法
    【js重学系列】this
    js-继承
    【js重学系列】数组高阶函数
    【js面试系列】数组去重
    云服务器部署项目-基本使用流程
    mongodb-基本使用
    移动端适配
  • 原文地址:https://www.cnblogs.com/moka/p/3088860.html
Copyright © 2011-2022 走看看