2014-10-20 76 views
0

當我實現這個它說「NetworkOnMainThreadException」。http獲取android異步任務

有人可以發表一個有效的例子嗎?

我已經嘗試了許多不同的例子和庫,但它沒有奏效。我的代碼:

private class HttpGetter extends AsyncTask<URL, Void, Void> { 

    @Override 
    protected Void doInBackground(URL... urls) { 
     // TODO Auto-generated method stub 
     StringBuilder builder = new StringBuilder(); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(String.valueOf(urls[0])); 

     try { 
      HttpResponse response = client.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        builder.append(line); 
       } 
       Log.v("Getter", "Your data: " + builder.toString()); //response data 
      } else { 
       Log.e("Getter", "Failed to download file"); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 


} 
+0

你確定這是你執行http任務的唯一代碼嗎?你可以顯示logcat嗎? – 2014-10-20 14:47:58

+0

顯示你如何調用它並解釋*如何*它不工作。你仍然得到'NetworkOnMainThreadException'或其他事情發生?另外,這是所有的任務代碼?你重寫'AsyncTask'的其他方法嗎? – codeMagic 2014-10-20 14:48:39

+0

你應該執行網絡,你不應該在另一個地方 – joao2fast4u 2014-10-20 14:50:20

回答

0

你應該執行像這樣的任務new HttpGetter().execute(URL)

請注意AsyncTask只能執行一次。

1

你怎麼調用這個類的對象。 如果你這樣打電話,那麼你不應該得到這個例外。

new HttpGetter().excute(new URL("http://www.urlstring.com")); 

或者你可以運行下面的代碼代碼無一例外但不推薦

StrictMode.ThreadPolicy policy = new  StrictMode.ThreadPolicy.Builder().permitAll().build(); 

StrictMode.setThreadPolicy(policy); 

添加此權限在android系統manifest.xml文件:

<uses-permission android:name="android.permission.INTERNET"/>