【Android筆記】不能在主線程中進行網絡操做

在網上看到,本身之前也曾經遇到:html

1 04-26 14:36:14.663: E/AndroidRuntime(10368): android.os.NetworkOnMainThreadException
2 04-26 14:36:14.663: E/AndroidRuntime(10368):         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
3 可是我在manifest裏配置了<uses-permission android:name="android.permission.INTERNET"/>

形成這樣的錯誤緣由是代碼不符合Android規範,意思是主線程裏網絡操做異常。java

通常耗時操做都不容許放在主線程裏直接操做,如網絡操做等,android

通常須要開一個子線程去訪問網絡,而後經過handler去更新界面。數據庫

固然,硬是要這樣測試操做也是能夠的,參考增長如下代碼:網絡

 1 @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
 4         .detectDiskReads()
 5         .detectDiskWrites()
 6         .detectNetwork()   // or .detectAll() for all detectable problems                      
 7         .penaltyLog()                      
 8         .build());              
 9         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
10         .detectLeakedSqlLiteObjects() //探測SQLite數據庫操做              
11         .penaltyLog() //打印logcat              
12         .penaltyDeath()              
13         .build()); 
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);

參考原文:http://www.apkbus.com/android-114524-1-1.htmlide

相關文章
相關標籤/搜索