问题出在:
- 你在主线程中做了请求网络这个操作,而Android设计者不允许你这样操作。
- 为什么呢,为了防止网络请求时间过长而导致界面假死的情况发生。
- 想要具体了解更多,可参照这篇博客:android.os.NetworkOnMainThreadException
问题解决:
- (不推荐) 简单暴力,强制使用,代码修改简单
在MainActivity.java 文件的 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中做网络请求,不用阻塞UI线程。
// Android 4.0 之后不能在主线程中请求HTTP请求
new Thread(new Runnable(){
@Override
public void run() {
}
}).start();