安卓与服务器进行Http通信抛出 NetworkOnMainThreadException 异常处理
一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。
解决方案有两个,一个是使用StrictMode,二是使用线程来操作网络请求。
在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码
第一种方法:简单暴力,强制使用,代码修改简单(但是非常不推荐)
if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}
第二种方法就是我使用的方法也是我要推荐的方法,将请求网络资源的代码使用Thread去操作。在Runnable中做HTTP请求,不用阻塞UI线程。
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.main_view);
    new Thread(runnable).start();
}
 
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Bundle data = msg.getData();
        String val = data.getString("value");
        Log.i(TAG,"请求结果:" + val);
    }
}
 
Runnable runnable = new Runnable(){
    @Override
    public void run() {
        // TODO: http request.
        Message msg = new Message();
        Bundle data = new Bundle();
        data.putString("value","请求结果");
        msg.setData(data);
        handler.sendMessage(msg);
    }
}
上面是比较通用的方法,我的代码:
 new Thread(new Runnable(){
                @Override
                public void run() {
                    cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);
                    imageView.setImageDrawable(cachedImage);
                }
            }).start();

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jonbb/article/details/52367539
文章标签: android 异常处理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

安卓与服务器进行Http通信抛出 NetworkOnMainThreadException 异常处理

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭