错误: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();