2013-07-16 3 views
2

У меня возникли проблемы с использованием HttpURLConnection раньше, и приложение, которое я разрабатываю, составляет> = 4.0. Есть ли способ использовать Apache 4.2 HttpClient (переупакованный here) с Google Volley?Использование Google Volley с Apache HttpClient 4.2

В настоящее время я использую только Apache 4.2 HttpClient, но с презентацией IO Volley. Я хочу переключиться на скорость и стабильность.

Заранее благодарен!

+1

В презентации он сказал, что можно обернуть пользовательский клиент http, так что я думаю, да. – njzk2

+0

Я видел несколько примеров, но ничего не использовал. Можете ли вы показать пример кода? Спасибо –

+0

IMO ... или то, что у вас есть или «loopj» может быть лучше, чем волейбол, в зависимости от того, что движется по полю. http://loopj.com/android-async-http/ Меня? Я делаю много загрузки файлов типа данных с соответствующими репликами JSON для данных, а volley/okhttp, похоже, пока не существуют с двоичными сущностями или файловыми сущностями. –

ответ

3

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

queue = Volley.newRequestQueue(getActivity(), new ApacheStack()); 

И затем реализовать ApacheStack, который расширяет HurlStack, как показано ниже, и переопределить необходимые функции.

public class ApacheStack extends HurlStack { 

    private final HttpClient client; 

    public ApacheStack() { 
     this(new HttpClient()); 
    } 

    public ApacheStack(HttpClient client) { 
     if (client == null) { 
      throw new NullPointerException("Client must not be null."); 
     } 
     this.client = client; 
    } 
} 
+0

Спасибо! Отличный ответ! Чистота и просто –

+0

Вы также должны переопределить все методы HurlStack. – tasomaniac

+1

Я использую OkHttp вместо HTTPUrlConnection и Apache. Это от Square Inc, и это очень хорошо. Тебе следует это попробовать. – tasomaniac

2

Следующая должно хватить:

mRequestQueue = Volley.newRequestQueue(context, new HttpClientStack(new DefaultHttpClient())); 
1

Принятый ответ имеет ошибку. Он должен расширять HttpClientStack, а не HurlStack. Переданный в httpclient не используется, если расширение HUrlStack. Вы можете проверить метод PerformRequest внутри библиотеки Volley и обнаружить, что клиент не используется.

Ниже приведен правильный код.

public class ApacheStack extends HttpClientStack { 

    private final HttpClient client; 

    public ApacheStack(HttpClient client) { 
     super(client); 
     .... 

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