2014-10-20 4 views
0

Когда я реализую это, он говорит «NetworkOnMainThreadException».http get in android async task

Может ли кто-нибудь опубликовать пример, который работает?

Я пробовал много разных примеров и библиотек, но он не работал. мой код:

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? вы могли бы показать логарифм? –

+0

Покажите, как вы это называете, и объясните *, как это не работает. Вы все еще получаете 'NetworkOnMainThreadException' или что-то еще? Кроме того, это весь код задачи? Вы переопределяете какие-либо другие методы «AsyncTask»? – codeMagic

+0

Вы должны выполнять сетевое взаимодействие, где вы не должны находиться в другом месте – joao2fast4u

ответ

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); 

ADD этого разрешения в андроиде файл manifest.xml:

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