解决异常:android.os.NetworkOnMainThreadException

来源:互联网 发布:开淘宝怎么开 编辑:程序博客网 时间:2024/05/22 09:48

在Android开发中有时候会遇到如题这样的问题,但是在别的手机上调试的时候这个异常不会被抛出,晚上查了资料,原来是Android4.0以后不能在主线程中请求HTTP请求。这个设计是为了防止网络请求时间过长而导致界面假死的情况。解决办法:用线程来操作网络请求。

private class historyThread implements Runnable  {public void run(){SoapObject gg=getTransformDataSimple();if(gg!=null){parserTransformData(gg);Message msg = Message.obtain();msg.what=1;handler.sendMessage(msg);}}}

private void QueryBtn(){mProgressBar.setVisibility(View.VISIBLE);mQueryBtn.setBackgroundColor(color.transparent);new Thread(new historyThread()).start();TimerTask task = new TimerTask(){        public void run() {        Message message = new Message();            message.what = 404;            handler.sendMessage(message);       }  };Timer timer = new Timer(); timer.schedule(task, 10000);  //超时10秒}

Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {if(IS_NETWORK_ERROR){Toast.makeText(mContext, "网络信号异常", Toast.LENGTH_LONG).show();//为了下次验证重新设置为falseIS_NETWORK_ERROR=false;mProgressBar.setVisibility(View.INVISIBLE);}else{switch(msg.what){case 1: mProgressBar.setVisibility(View.INVISIBLE);mQueryBtn.setVisibility(View.VISIBLE);mQueryBtn.setBackgroundResource(R.drawable.button_selector);Toast.makeText(mContext, "查询完毕", Toast.LENGTH_SHORT).show();mHistoryData.setVisibility(View.VISIBLE);mLinearLayout.setVisibility(View.INVISIBLE);SimpleAdapter adapter=new SimpleAdapter(mContext, mData, R.layout.mlist_history, new String[]{"datatime","installlocal","destoried","moved","shocked","approached"}, new int[]{R.id.textview_datatime,R.id.textview_installlocal,R.id.textview_destoried,R.id.textview_moved,R.id.textview_shocked,R.id.textview_approached});mHistoryData.setAdapter(adapter);break;case 404:mProgressBar.setVisibility(View.INVISIBLE);break;default :break;}}}};


0 0
原创粉丝点击