Волейбол в предпросмотре разработчика Android M: org.apache.http не может быть разрешен
Я тестирую Volley HurlStack в Android M Developer Preview.
После изменения compileSdkVersion
от 22
до 'android-MNC'
все классы из org.apache.http не скомпилированы:
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.StatusLine;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicStatusLine;
Как я могу изменить свой код для решения этой проблемы?
Я знаю, что есть некоторые изменения, связанные с HTTP-клиентом Apache, но он по-прежнему не работает, когда я выполняю шаги, чтобы добавить useLibrary 'org.apache.http.legacy'
в gradle.
Ссылка: HurlStack.java AOSP
Изменения поведения: удаление HTTP-клиента Apache
Ответы
Ответ 1
В официальном документе "Изменения поведения" говорится, что HTTP-клиент Apache удален в Android M - не устарел, но удален. Лично я настоятельно рекомендую перейти на OkHttp, который фактически используется как движок HttpURLConnection
с момента установки KitKat, используя зависимость, которую вы получаете все свежие свойства от команды Square напрямую.
Ответ 2
Вы можете игнорировать эти предупреждения, потому что Volley по-прежнему компилируется с использованием API 22:
https://github.com/mcxiaoke/android-volley/blob/master/gradle.properties
добавьте их в конфигурацию proguard:
-dontwarn org.apache.http. **
-dontwarn com.android.volley.toolbox. **
Ответ 3
Помимо использования okHttp, резервное копирование заключается в использовании устаревшего apache httpclient, предложенного Google.
См. Мой ответ здесь, чтобы заставить его работать.
Как использовать устаревший HTTP-клиент Apache на Android Marshmallow?
Ответ 4
Если, как и я, единственная причина, по которой вы включали HttpClient, - это то, что вы тестировали коды ответов HTTP:
if (error.networkResponse.statusCode == HttpStatus.SC_UNAUTHORIZED) {}
тогда простое исправление - это просто использовать версию констант, которые находятся в классе HttpURLConnection:
if (error.networkResponse.statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {}