android.os.NetworkOnMainThreadException
是一个在 Android 开发中常见的异常,它发生在你的应用尝试在主线程上进行网络操作时。从 Android 6.0 (API level 23) 开始,默认情况下,应用程序的主线程(UI线程)不允许执行网络操作,这是为了避免在主线程中造成的用户界面阻塞,提高应用程序的响应性。
解决方法:
-
使用
AsyncTask
:将网络操作放在doInBackground
方法中,这样可以在后台线程中执行网络请求,不会阻塞主线程。// 使用 AsyncTask 进行网络请求 new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { // 这里进行网络请求操作 return "网络请求结果"; } @Override protected void onPostExecute(String result) { // 在这里更新UI } }.execute();
-
使用
Thread
或HandlerThread
:在一个单独的线程中进行网络操作。 -
使用
Volley
或其他网络库:这些库通常提供了内置的异步请求处理。 -
如果确实需要在主线程上进行网络操作,可以在应用的
AndroidManifest.xml
文件中为应用添加android:usesCleartextTraffic="true"
属性,并在代码中使用StrictMode.ThreadPolicy
来临时允许在主线程上进行网络操作,但这不是推荐的做法,因为它可能会影响应用程序的响应性和稳定性。