2015-07-07 2 views
0

Я использую AsyncTask для выполнения HTTP GET на android. Это приводит к длительной задержке отправки моих данных в URL. Есть ли способ исправить тот или иной подход, который можно использовать?Использование AsyncTask для HTTP GET на android вызывает длительную задержку при отправке данных

Вот мой код: класс RequestTask расширяет AsyncTask {

@Override 
    protected String doInBackground(String... uri) { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response; 
     String responseString = null; 

     HttpParams httpParameters = httpclient.getParams(); 
     HttpConnectionParams.setTcpNoDelay(httpParameters, true); 

     try { 
      response = httpclient.execute(new HttpGet(uri[0])); 
      StatusLine statusLine = response.getStatusLine(); 
      if(statusLine.getStatusCode() == HttpStatus.SC_OK){ 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       response.getEntity().writeTo(out); 
       responseString = out.toString(); 
       out.close(); 
      } else{ 
       //Closes the connection. 
       response.getEntity().getContent().close(); 
       throw new IOException(statusLine.getReasonPhrase()); 
      } 
     } catch (ClientProtocolException e) { 
      //TODO Handle problems.. 
     } catch (IOException e) { 
      //TODO Handle problems.. 
     } 
     return responseString; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     //Do anything with response.. 
    } 
} 

А вот вызов:.

новый RequestTask() Execute ("http://10.10.10.211:9081/?modelname=model1&sourcedata=" + значения [1]);

+0

'вызывает длинную задержку' определяет это и объясняет, как и как вы это наблюдаете, и/что заставляет вас думать, что это связано с использованием асинтезы – njzk2

+0

Возможно ли, что ваша задача не работает в асинхронном режиме? Попробуйте запустить его у исполнителя через task.executeOnExecutor (AsyncTask.THREAD_POOL_EXECUTOR); Возможно, вы захотите реализовать что-то вроде http://stackoverflow.com/a/12160159/1426565, чтобы помочь с другими задачами, которые вы хотите запускать независимо. – Guardanis

+0

. Задолгосрочно, я имею в виду, что для получения ответа требуется 9-10 секунд используя мое устройство Android. Когда я запускаю тот же запрос на своем компьютере с помощью Java-приложения, ответ почти мгновен. –

ответ

0

Я рекомендую использовать для этого подхода Volley. Я использую его в своих проектах, и у меня никогда не возникало никаких проблем.

+0

Волейбол решил проблему, и это намного проще в использовании, чем мой оригинальный метод. –

+0

Да, это так просто, не так ли? Я рад помочь вам. :) –

0

Это не обязательно ответ на ваш вопрос, но я действительно рекомендую использовать Retrofit для совершения звонков REST с Android (и даже лучше вместе с RxJava). В любом случае вы не должны сильно задерживаться от факта, что запрос выполняется в фоновом потоке.

0

Я не могу придумать никаких причин, по которым была бы задержка, помимо любой сетевой проблемы!

Обращение с сетевыми вызовами Http - это боль, и нужно много работать, чтобы справиться с этим, однако зачем изобретать колесо ?!

Есть библиотеки, которые заботятся обо всех беспорядочных вещах для нас, используйте один из них.

Я использую OKHTTP в своем проекте, и это очень хорошо.

This является ответом на CommonsWare,

Пожалуйста, почитайте его, он окажется очень полезным.

Смежные вопросы