android.os.NetworkOnMainThreadException
程序员文章站
2022-05-31 14:18:38
...
网络请求要放在子线程中操作,使用handle进行消息传递。
第一种方法:简单暴力,强制使用,代码修改简单(但是非常不推荐)
在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线程。
Handler handler = new Handler(){ @Override public void handleMessage(Message msg){ Bundle data = msg.getData(); //从data中拿出存的数据 String val = data.getString("value"); //将数据进行显示到界面等操作 } }; Runnable runnable = new Runnable(){ @Override public void run(){ //进行访问网络操作 Message msg = Message.obtain(); Bundle data = new Bundle(); data.putString("value", "存放数据"); msg.setData(data); handler.sendMessage(msg); } };
推荐阅读
-
Caused by: android.os.NetworkOnMainThreadException错误解决办法
-
老出现这样问题现在做个记录:android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException
-
android.os.NetworkOnMainThreadException