首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 网络请求必须在子线程:NetworkOnMainThreadException 解決方案

     編輯:程式設計疑難解答

錯誤

android.os.NetworkOnMainThreadException

原因

Android 4.0+ (API 14+) 嚴禁主線程 (UI 線程) 執行網絡 I/O 操作。

三種解決方案

  1. AsyncTask (已棄用但仍可用):
    new AsyncTask() {
        protected String doInBackground(Void... params) {
            return httpGet(url); // 子線程
        }
        protected void onPostExecute(String result) {
            updateUI(result); // 主線程
        }
    }.execute();
  2. Thread + Handler / runOnUiThread:
    new Thread(() -> {
        String result = httpGet(url);
        runOnUiThread(() -> updateUI(result));
    }).start();
  3. 第三方庫 (推薦):OkHttp + Retrofit + RxJava / Coroutines,自動線程調度。

最佳實踐

新項目直接使用 OkHttp + Coroutines (Kotlin) 或 Retrofit + RxJava,避免手動線程管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved