在android 4.0上運(yùn)行時(shí)報(bào)android.os.NetworkOnMainThreadException異常,在4.0中,訪問網(wǎng)絡(luò)不能在主程序中進(jìn)行,有三個(gè)方法可以解決,一個(gè)是在主程序中增加:
- //安卓2.3以后訪問網(wǎng)絡(luò)增加內(nèi)容
- StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
- .detectDiskReads()
- .detectDiskWrites()
- .detectNetwork()
- .penaltyLog()
- .build());
- StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
- .detectLeakedSqlLiteObjects()
- .detectLeakedClosableObjects()
- .penaltyLog()
- .penaltyDeath()
- .build());
第二種采用異步方式:
- private class GeocodeingOnclickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- new GeocodeingTask().execute();
- }
- }
- private class GeocodeingTask extends AsyncTask<Integer, Integer, Integer>{
- @Override
- protected Integer doInBackground(Integer... params) {
- String url="http://maps.googleapis.com/maps/api/geocode/json?" +
- "latlng=35.95405270,117.30649970&sensor=false";
- //創(chuàng)建一個(gè)Httpclient對(duì)象
- HttpClient httpClient=new DefaultHttpClient();
- String responseData="";
- try {
- //向指定的Http地址發(fā)送請(qǐng)求
- HttpResponse httpResponse=httpClient.execute(new HttpPost(url));
- //取得服務(wù)器返回的響應(yīng)
- HttpEntity httpEntity=httpResponse.getEntity();
- BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(httpEntity.getContent()));
- String line="";
- while((line=bufferedReader.readLine())!=null){
- responseData=responseData+line;
- }
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- Gson gson=new Gson();
- TestResult result=gson.fromJson(responseData, TestResult.class);
- System.out.println(result.toString());
- return null;
- }
- }
第三種采用線程的方式(與第二種類似 都是異步的方式)
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 啟動(dòng)線程執(zhí)行下載任務(wù)
- new Thread(downloadRun).start();
- }
-
- /**
- * 下載線程
- */
- Runnable downloadRun = new Runnable(){
-
- @Override
- public void run() {
- // TODO Auto-generated method stub
- updateListView();
- }
- };
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。