Может ли кто-нибудь сказать мне diffrence btw AsyncHttpClient vs AsyncTask? [Дубликат]

еще короче, используя точку:

  #! / bin / bash.  CONFIG_FILE sudo -u wwwrun svn up / srv / www / htdocs / $ production sudo -u wwwrun svn up / srv / www / htdocs / $ playchool  
2
задан morten.c 27 March 2014 в 23:52
поделиться

5 ответов

Как подразумевается вышеупомянутой библиотекой, вы можете выполнять сетевые вызовы асинхронно, то есть не в основном потоке, и поэтому мы фактически используем asynctask, чтобы избежать блокировки основного потока.

Итак, если вы используете выше библиотеки, тогда нет необходимости использовать Asynctask, и я уверен, что вы никогда не получите NetworkConnectionOnMainThreadException. Надеюсь, это поможет.

5
ответ дан Prateek 15 August 2018 в 15:29
поделиться
  • 1
    вопрос в том, как можно обрабатывать тайм-аут с помощью Asynctask и клиента http по умолчанию? – Ravi Bhatt 27 September 2013 в 08:28
  • 2
    @Prateek Спасибо, это помогло. Теперь я использую AsyncHttpClient без asynctask. После того как я переопределил все методы onFailure библиотеки, он работал хорошо. – StarWars 10 October 2013 в 06:42
  • 3
    @StarWars Рад, что это помогло. Вы можете принять этот ответ, если хотите – Prateek 10 October 2013 в 08:09
  • 4
    @RaviBhatt, это явно не вопрос. – Muneeb Mirza 5 May 2016 в 06:24

Прежде всего, асинктас - это синхронное выполнение, а AsyncHttpClient - одновременное выполнение. Не используйте клиент внутри asynctask. Используйте только AsyncHttpclient, как это. Создайте общий обработчик запросов и прослушиватель. Вы также можете создавать различные методы запроса, такие как makeRequest для каждого запрошенного вами запроса, а также создавать разные слушатели.

public class RequestHandler{

private static RequestHandler instance;

private AsyncHttpClient client;

private RequestHandler(){
    client = new AsyncHttpClient();
}

public static RequestHandler getInstance(){
    if(instance == null){
        instance = new RequestHandler();
    }
    return instance;
}

// You can add more parameters if you need here.
public void makeRequest(String url, RequestListener listener){
    client.get(url, new AsyncHttpResponseHandler() {

        @Override
        public void onStart() {
            // called before request is started
            //Some debugging code here
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] response) {
            listener.onSuccess(statusCode, headers, response);
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable exception) {
             listener.onFailure(statusCode, headers, errorResponse,exception);
            // called when response HTTP status is "4XX" (eg. 401, 403, 404)
            //Some debugging code here, show retry dialog, feedback etc. 
        }

        @Override
        public void onRetry(int retryNo) {
             //Some debugging code here-------

        }
    });
 }
}

public interface RequestListener{
public void onSuccess(int statusCode, Header[] headers, byte[] response);
public void onFailure(int statusCode, Header[] headers, byte errorResponse, Throwable e);
}

Дать этот запрос url, как это из активности или фрагмента

RequestHandler handler = RequestHandler.getInstance();
handler.makeRequest("http://www.google.com", new RequestListener(){
 @Override
 public void onSuccess(int statusCode, Header[] headers, byte[] response) {
    // do whatever you want here.       
 }
});
0
ответ дан anand krish 15 August 2018 в 15:29
поделиться

Используйте только async-http-client и просто устанавливайте таймауты следующим образом:

AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

public MyClassConstructor(){

    asyncHttpClient.setConnectTimeout(5000); // default is 10 seconds, minimum is 1 second
    asyncHttpClient.setResponseTimeout(5000); // as above
    asyncHttpClient.setTimeout(5000); // both connection and socket timeout
    asyncHttpClient.setMaxRetriesAndTimeout(1, 100); // times, delay

Надеемся, что это поможет

0
ответ дан Ga Sacchi 15 August 2018 в 15:29
поделиться

С AsyncHttpClient вы можете легко обрабатывать тайм-ауты с помощью инструкции типа:

client.setTimeout(5000)

Проверить документы библиотеки для всех доступных методов.

1
ответ дан Luke 15 August 2018 в 15:29
поделиться
  • 1
    Я понял метод setTimeout после чтения документации библиотеки. В этой библиотеке уже установлен тайм-аут по умолчанию 10 секунд, и это нормально, учитывая, что мое приложение предназначено для азиатского рынка, но я не уверен. Поскольку он использует json api в качестве backend, поэтому данные не намного большие по размеру. Вы рекомендуете 5-секундный тайм-аут, как вы упомянули выше? – StarWars 10 October 2013 в 06:47

Если вы используете эту библиотеку, вам не нужно использовать класс AsyncTask для запросов.

Внутри вашего кода активности вы можете просто добавить что-то вроде этого:

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

Это автоматически отправит запрос в фоновом потоке. Внутри onSuccess вы можете иметь дело с ответом (похоже на onPostExecute, но я думаю, что это не на тему пользовательского интерфейса).

1
ответ дан Sebastian Oberste-Vorth 15 August 2018 в 15:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: