【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

 

转载于:https://www.cnblogs.com/tanghuian/p/4594996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值