Как реализовать Android Volley с помощью OkHttp 2.0?

#android #android-volley #okhttp

#Android #android-volley #okhttp

Вопрос:

Этот OkHttpStack больше не поддерживается в OkHttp2.0: https://gist.github.com/JakeWharton/5616899

Каков текущий шаблон для интеграции OkHttp 2.0.0 с Volley?

Комментарии:

1. По этому поводу уже есть комментарий, указывающий на версию поддержки OkHttp 2.0 HttpStack .

2. Да, но класс, опубликованный ceram1, имеет настраиваемую обработку кэша. Я искал самый простой способ. А также, я понятия не имею, является ли эта реализация оптимальной / стандартной / правильной

Ответ №1:

Вы должны использовать модуль okhttp-urlconnection, который реализует java.net.HttpURLConnection API, поэтому:

  • Загрузите или установите зависимость для okhttp-urlconnection
  • Перепишите свой OkHttpStack, чтобы использовать класс OkUrlFactory:
     public class OkHttpStack extends HurlStack {
       private final OkUrlFactory okUrlFactory;
       public OkHttpStack() {
           this(new OkUrlFactory(new OkHttpClient())); 
       }
       public OkHttpStack(OkUrlFactory okUrlFactory) {
           if (okUrlFactory == null) {
               throw new NullPointerException("Client must not be null.");
           }
           this.okUrlFactory = okUrlFactory;
       }
       @Override
       protected HttpURLConnection createConnection(URL url) throws IOException {
           return okUrlFactory.open(url);
       }
    } 

Комментарии:

1. Я использовал это решение и добавил следующие зависимости gradle: compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.squareup.okio:okio:1.0.1'

Ответ №2:

Вы также можете использовать это

 import com.android.volley.toolbox.HurlStack;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.OkUrlFactory;

/**
 * An {@link com.android.volley.toolbox.HttpStack HttpStack} implementation
 * which uses OkHttp as its transport.
 */
public class OkHttpStack extends HurlStack {
    private final OkUrlFactory mFactory;

    public OkHttpStack() {
        this(new OkHttpClient());
    }

    public OkHttpStack(OkHttpClient client) {
        if (client == null) {
            throw new NullPointerException("Client must not be null.");
        }
        mFactory = new OkUrlFactory(client);
    }
}
 

Комментарии:

1. Я думаю, что это более читабельно, чем ответ @fjmontiel, но, кроме того, это точно то же самое, не так ли?

2. да!, существует множество вариантов в зависимости от требований, например, для ssl gist.github.com/tbruyelle/0729aef4df2c11b21fdf

Ответ №3:

Вы также можете сделать это сейчас без зависимости от HttpURLConnection:

https://plus.google.com / JakeWharton/сообщения/31jhDwaCvtg

https://gist.github.com/bryanstern/4e8f1cb5a8e14c202750