報android.os.NetworkOnMainThreadException錯誤

來源:互聯網
上載者:User

標籤:

問題描述:

 1、當前的項目用的是4.3,經過斷點調試,知道錯誤發生在

HttpURLConnection con = (HttpURLConnection)url.openConnection();//開啟一個connection串連        con.setRequestMethod("GET");        con.setConnectTimeout(5000);                //得到伺服器返回來的流        InputStream is = con.getInputStream();//錯誤拋出的地方

    並報出如下錯誤:

  03-14 14:27:38.428: W/System.err(30191): android.os.NetworkOnMainThreadException

  03-14 14:27:38.429: W/System.err(30191): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1134)

 

解決:

  經過網上尋找相關資料得知,Android 2.3及以上版本開始提供了一個新的類 StrictMode,該類可以用於捕捉髮生在應用程式主線程中耗時的磁碟、網路訪問或函數調用,可以協助開發人員改進程式,使主線程處理 UI 和動畫在磁碟讀寫和網路操作時變得更平滑,避免主線程被阻塞。

   此處是主線程訪問網路時出的異常。 Android在4.0之前的版本支援在主線程中訪問網路,但是在4.0以後對這部分程式進行了最佳化,也就是說訪問網路的代碼不能寫在主

線程中了。

    網上相關資料得知,在主線程中添加如下代碼即可解決:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()        .detectDiskReads()        .detectDiskWrites()        .detectNetwork() // 這裡可以替換為detectAll() 就包括了磁碟讀寫和網路I/O        .penaltyLog() //列印logcat,當然也可以定位到dropbox,通過檔案儲存相應的log        .build());        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()        .detectLeakedSqlLiteObjects() //探測SQLite資料庫操作        .penaltyLog() //列印logcat        .penaltyDeath()        .build()); 

 

報android.os.NetworkOnMainThreadException錯誤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.