2016-02-21 4 views
2

Я не очень хорошо знаком с библиотекой OkHttp, и у меня есть некоторые сомнения в том, как ее использовать для асинхронных запросов.OkHttp-асинхронные вызовы: AsyncTask или OkHttp async api?

Для программирования Android, я использовал андроида библиотеку для HTTP и я использовал AsyncTask для некоторого запроса.

Но так как я хотел попробовать библиотеку OkHttp, я столкнулся с некоторой «проблемой» относительно того, как правильно ее использовать.

Пример:

Представьте, что вы хотите осуществить запрос асинхронного использования OkHttp. Я читал, что у OkHttp есть собственный async api (https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/AsynchronousGet.java).

Но тогда я наткнулся на это сообщение (Square`s OkHttp. Download progress), в котором парень использовал «старую» асинхронную программу, но с запросом OkHttp (я также нашел на других форумах, что люди используют AsyncTask с OkHttp).

Это смутило быть немного потому что это может быть сделано просто с этим кусок кода, который может быть также приспособленной для POST:

OkHttpClient client = new OkHttpClient(); 
// GET request 
Request request = new Request.Builder() 
     .url("http://google.com") 
     .build(); 
client.newCall(request).enqueue(new Callback() { 
    @Override 
    public void onFailure(Request request, IOException e) { 
     Log.e(LOG_TAG, e.toString()); 
    } 

    @Override 
    public void onResponse(Response response) throws IOException { 
     Log.w(LOG_TAG, response.body().string()); 
     Log.i(LOG_TAG, response.toString()); 
    } 
}); 

ВОПРОС:

  1. , что является правильным способ использовать async-запросы с помощью OkHttp?
  2. Полезно ли использовать AsyncTask с помощью OkHTTP?
  3. В каких случаях я должен использовать AsyncTask с помощью OkHttp вместо того, чтобы использовать OkHttp async api?

ответ

1

Я пробовал оба подхода, и оба они работают для моей потребности. Это действительно зависит от вашей ситуации и того, что вам действительно нужно. Асинхронная версия более приятная, выглядит проще, но другая (также если вы делаете это с модифицированной версией) предлагает еще несколько функций.

например. В asyncTask нет возможности отменить сетевой вызов, который с модификацией (я имею в виду модифицированную причину, с которой я попытался с этим решением) может быть легко выполнен.

Вот некоторые хорошие ссылки, чтобы дать вам лучшее представление о том, как работает дооснащения:

https://futurestud.io/blog/retrofit-2-upgrade-guide-from-1-9

http://instructure.github.io/blog/2013/12/09/volley-vs-retrofit/

Также AsyncTask на самом деле синхронизации вызова (это также зависит от версии AsyncTask). Поэтому для асинхронного вызова вам нужно использовать другой подход.