错误:android.os.NetworkOnMainThreadException
产生场景:在UI线程中执行HTTP请求
解决方案:
(1)使用StrictMode
在发起HTTP请求的Activity的OnCreate函数中添加如下代码:
StrictMode.setThreadPolicy(
new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(
new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());(2)使用异步方式发起HTTP请求
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String val = data.getString("value");
}
}
Runnable asyncHTTPRequest = new Runnable(){
@Override
public void run() {
//
// TODO: http request.
//
Message msg = new Message();
Bundle data = new Bundle();
data.putString("value","result");
msg.setData(data);
handler.sendMessage(msg);
}
}在需要发起请求的地方调用:
new Thread(asyncHTTPRequest).start();
本文介绍如何避免在Android应用的UI线程中执行HTTP请求导致的NetworkOnMainThreadException错误。提供了两种解决方案:一是通过StrictMode策略检测并记录网络操作;二是采用异步线程进行网络请求,确保主线程流畅。
2635

被折叠的 条评论
为什么被折叠?



