问题描述:在接游戏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,要复习线程的用法。。。。。。。。。。。。。。

解决发http get请求的时候不成功,出现android.os.NetworkOnMainThreadException的异常的更多相关文章

  1. 解决android.os.NetworkOnMainThreadException

    好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadExc ...

  2. Android Eclipseproject开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决的方法

    android.os.NetworkOnMainThreadException 异常的解决的方法. 刚开是把HttpURLConnectionnection 打开连接这种方法放在UI线程里了,可能不是 ...

  3. [Android开发那点破事]解决android.os.NetworkOnMainThreadException

    [Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡 ...

  4. android.os.NetworkOnMainThreadException异常如何解决

    android.os.NetworkOnMainThreadException 08-08 17:53:30.635 I/ArticleTable(22461): 添加成功 58 08-08 17:5 ...

  5. 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)

    安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  | ...

  6. 执行Socket socket = new Socket(ip, port);时抛出个异常:android.os.NetworkOnMainThreadException解决办法

    首先,确认你的android版本是4.0之后再用此方法解决,因为在4.0之后在主线程里面执行Http请求才会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧.Android在4.0之前的版本 ...

  7. android.os.NetworkOnMainThreadException解决办法

    代码改变世界 在发起Http请求的Activity里面的onCreate函数里面添加如下代码: StrictMode.setThreadPolicy(new StrictMode.ThreadPoli ...

  8. android.os.networkonmainthreadexception怎么解决

    在android2.3以后,在主线程中必须使用另一个线程,如handler机制,或者异步任务获取网络数据. 如果你的访问网络操作必须放在主线程中执行,那么在onCreate()中添加 if (GetV ...

  9. android.os.NetworkOnMainThreadException解决

    很早就知道Android4.0以后,要把耗时的网络操作放在多线程中,处理方法有: 1) setContentView(R.layout.activity_main)下面加上如下代码 if (andro ...

随机推荐

  1. Maven学习-Profile详解

    Profile能让你为一个特殊的环境自定义一个特殊的构建:profile使得不同环境间构建的可移植性成为可能.Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值.有了prof ...

  2. Exchanger类详解

    Exchanger并发辅助类,允许在并发任务之间交换数据.具体来说Exchanger类在两个线程之间定义同步点.当两个线程到达同步点时,它们交换数据结构.需要注意的是Exchanger类只能同步两个线 ...

  3. Charles安装破解及使用

    摘要 在发开过程中,追踪请求和监控请求与返回数据是我们经常会需要的一个需求,在Mac端,Charles是一款非常易用的抓包工具. Mac端的优秀抓包工具--Charles使用 一.简介 Charles ...

  4. JEESZ-Redis分布式缓存安装和使用

    独立缓存服务器: Linux CentOS Redis 版本: 3.0下面我们针对于Redis安装做下详细的记录:编译和安装所需的包:# yum install gcc tcl创建安装目录:# mkd ...

  5. windows上安装jdk

    1.下载jdk安装包 jdk官网   http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装jdk 傻瓜式下一步 ...

  6. web.xml报错

    The content of element type "web-app" must match "(icon?,display-name?,description?,d ...

  7. 小程序的1024KB

    1024kb 只是一个目前编译后代码可上传最大限制,至于后期会不会更改,不得而知.个人只是想借 1024kb 来和大家一起交流一下,如何在限制下,挥舞大刀- 微信官方回答了,为什么有 1024kb 的 ...

  8. Django学习报错记录

    1. 运行manage.py任务  makemigrations时,报错: doesn't declare an explicit app_label and isn't in an applicat ...

  9. docker安装与学习

    docker学习 以ubuntu为实例 第一步检查系统内核>3.80 第二步 安装Docker 之前先更新apt-get update 在执行安装命令 apt-get install -y do ...

  10. 将 FFmpeg 移植到 Android平台 (完整版)

    首先需要去FFmpeg的官网http://www.ffmpeg.org/去下载FFmpeg的源码,目前的版本号为FFmpeg3.3(Hilbert). 下载的文件为压缩包,解压后得到ffmpeg-3. ...