2014-10-20 64 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"/>