【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

相关文章
相关标签/搜索