zoukankan      html  css  js  c++  java
  • 解决发http get请求的时候不成功,出现android.os.NetworkOnMainThreadException的异常

    问题描述:在接游戏sdk的时候,由于游戏要求购买的时候是在主线程里面进行的,但是发http请求是不能在主线程里面发,否则就会出现android.os.NetworkOnMainThreadException的异常

    解决方法,新开线程

    new Thread(){
                            public void run(){
                                userInfo= HttpRequest.sendGet(URL, param);
                                Message msg = new Message();
                                Bundle data = new Bundle();
                                data.putString("userInfo",userInfo);
                                msg.setData(data);
                                handler.sendMessage(msg);
                            }
                        }.start();

    新开线程的时候发现还是拿不到get请求的返回值,原因是线程是并行的,如果在线程外面取get的返回值,有可能get请求线程还没有执行完就已经开始赋值了

    解决方法:

    1.使用handler来通知取线程的值

        Handler handler = new Handler(){
             @Override
             public void handleMessage(Message msg) {
                 super.handleMessage(msg);
                 Bundle data = msg.getData();
                 String userInfo = data.getString("userInfo");
                 logV(userInfo);
                 userId  = parseUserIdFromLoginResult(userInfo);
             }
         };

    好处是不吃cpu没有等待

    2.设置一个flag,初始化为false,在run里面。get请求线程执行完之后赋值为true,然后在外面循环判断

    while(flag == true){//取值}

    这种方法简单,但是有很严重的确定,就是吃cpu,容易卡顿

    经验总结:

    在找错误的时候,一切依赖logcat,多看日志,有些地方适当设置输出log.v,要复习线程的用法。。。。。。。。。。。。。。

  • 相关阅读:
    洛谷P2402 奶牛隐藏
    BZOJ2150: 部落战争
    HDU 6405 Make ZYB Happy(广义SAM)
    CodeForces
    2019CCPC秦皇岛 E题 Escape(网络流)
    2019CCPC秦皇岛D题 Decimal
    2019CCPC秦皇岛I题 Invoker(DP)
    2019CCPC秦皇岛 F Forest Program
    2019CCPC秦皇岛 J MUV LUV EXTRA(KMP)
    2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)
  • 原文地址:https://www.cnblogs.com/caimuqing/p/5915851.html
Copyright © 2011-2022 走看看