【Android笔记】不能在主线程中进行网络操作

在网上看到,自己以前也曾经遇到:

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规范,意思是主线程里网络操作异常。

一般耗时操作都不允许放在主线程里直接操作,如网络操作等,

一般需要开一个子线程去访问网络,然后通过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.html

 

posted @ 2015-06-23 11:19  Fion_安  阅读(2051)  评论(0编辑  收藏  举报