2013-05-05 1 views
0

Я пропустил этот код, плавно переходя на Android 2.2. Но на Android 4.0 он падает.Запросы HttpClient в основном потоке продолжают сбой, когда в Runnable

Я предполагаю, что это вызвано HttpClient. Поэтому я переместил код в Runnable, но он продолжает сбой.

new Runnable() { 

     @Override 
     public void run() { 
      try {   
       HttpClient client = new DefaultHttpClient(); 
       HttpGet request = new HttpGet(); 
       request.setURI(new URI(serverroot + URI_ARGS)); 
       client.execute(request); 
      } catch (URISyntaxException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }.run(); 

Есть еще один способ сделать это без использования AsyncTask?

+0

Вы можете сообщить логический код ошибки – j2emanue

ответ

0

Начиная с API11 есть новое исключение NetworkOnMainThreadException, которое будет выброшено, если вы работаете с сетью в потоке пользовательского интерфейса, поэтому вам нужно переместить код из потока пользовательского интерфейса. Runnable - это просто интерфейс, который вам не поможет без Thread.

new Thread(new Runnable() { 

    @Override 
    public void run() { 
     try { 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(); 
      request.setURI(new URI(serverroot + URI_ARGS)); 
      client.execute(request); 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}).start(); 
+0

О, я этого не заметил. Спасибо. Он работает сейчас. –

+0

@MatoKormuth На самом деле вам нужно запустить новый поток, который будет выполнять операцию из потока пользовательского интерфейса. Этот код можно использовать, если вы не хотите взаимодействовать с пользовательским интерфейсом, иначе используйте «AsyncTask», которые также создают отдельный поток и предоставляют удобный способ взаимодействия с пользовательским интерфейсом. – andrew