Android 4.1项目:使用新浪微博分享时报:
android.os.NetworkOnMainThreadException
网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧。那么网上的朋友也给出了相应的解决方案,这叫上有政策下有对策:
一:在发起Http请求的Activity里面的onCreate函数里面添加如下代码:
1 //详见StrictMode文档 2 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); 3 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
如果正在做的项目不是Android 4.0的是看不到StrictMode类的。我也是用的网上给的com_weibo_android.jar。但是这个jar包下载下来的时候是2.3 的,要先转换成Android 4.0的项目,再在分享对应的ShareActivity的onCreate()函数中添加上面的两行代码。这样就不会报这个错误了。
二:使用Thread、Runnable、Handler这三个类:
1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 this.setContentView(R.layout.share_mblog_view); 4 new Thread(runnable).start(); 5 } 6 7 Handler handler = new Handler(){ 8 @Override 9 public void handleMessage(Message msg) { 10 super.handleMessage(msg); 11 Bundle data = msg.getData(); 12 String val = data.getString("value"); 13 Log.i("mylog","请求结果为-->" + val); 14 } 15 } 16 17 Runnable runnable = new Runnable(){ 18 @Override 19 public void run() { 20 // 21 // TODO: http request. 22 // 23 Message msg = new Message(); 24 Bundle data = new Bundle(); 25 data.putString("value","请求结果"); 26 msg.setData(data); 27 handler.sendMessage(msg); 28 } 29 }
摘自:http://www.cnblogs.com/sjrhero/articles/2606833.html