2014-02-20 38 views
1

我已經開始玩弄簡單的概念,如綁定ListViews並將JSON數據提取到填充ListView的適配器。附帶以下代碼的例子:Android的StrictMode - 我如何正確使用它,爲什麼我的應用程序不能沒有它的工作?

 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
      .detectAll() 
      .penaltyLog() 
      .build(); 
     StrictMode.setThreadPolicy(policy); 

起初我並沒有太在意

// Testing only. Do NOT USE IN PRODUCTION! 

評論,直到我刪除了政策的代碼,這導致我的應用程序開始扔每次的ANR它返回HttpResponse。

看起來像我得到'android.os.NetworkOnMainThreadException'異常。現在,我可以理解你爲什麼不希望在你的UI線程上運行任何網絡代碼,但是爲什麼StrictMode甚至會允許你在第一時間做到這一點,如果它保證拋出運行時異常?

在同一張紙條上,有人可以解釋上面的StrictMode代碼片段嗎?我已經閱讀了關於它的Android開發文檔,但我仍然對它如何允許代碼運行感到困惑。

我唯一的理論是低於僞解釋:

當前線程,檢測所有的違規操作。記錄問題,但忽略它。將當前線程的策略設置爲使用此規則。

我關閉了嗎?

回答

2

from api 9你不能直接調用主線程上的網絡操作,而是你可以使用AsyncTask來完成。請查看tutorial瞭解更多信息。

+0

+1,但如果你提供了一些示例代碼,這將是一個更好的答案。 –

+0

+1教程看起來非常體面,今晚會給它一個閱讀,謝謝。 –

+0

@Rudi在互聯網上有很多例子,還有一個例子可以在教程鏈接 –

相關問題