解决发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,要复习线程的用法。。。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/caimuqing/p/5915851.html