Залп в Android M предварительного просмотра: org.apache.http не может быть решена

Я тестирую Volley's 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' в градле.

Ссылка: HurlStack.java AOSP

Изменения поведения: удаление HTTP-клиента Apache

4 ответа

Решение

В официальном документе "Изменения поведения" говорится, что HTTP-клиент Apache удален в Android M - не устарел, но удален. Лично я настоятельно рекомендую перейти на OkHttp, который на самом деле используется в качестве HttpURLConnection Начиная с KitKat, используя зависимость, вы получаете все свежие полезности от команды Square напрямую.

Вы можете игнорировать эти предупреждения, потому что Volley все еще компилируется с использованием API 22: https://github.com/mcxiaoke/android-volley/blob/master/gradle.properties

добавьте их в конфигурацию Proguard: -dontwarn org.apache.http.** -dontwarn com.android.volley.toolbox.**

Если, как и я, единственная причина, по которой вы включили HttpClient, заключается в том, что вы тестировали коды ответов HTTP:

if (error.networkResponse.statusCode == HttpStatus.SC_UNAUTHORIZED) {}

тогда простое исправление состоит в том, чтобы просто использовать версию констант в классе HttpURLConnection:

if (error.networkResponse.statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {}

Помимо использования okHttp, запасным вариантом является использование устаревшего apache httpclient, как это было предложено Google. Смотрите мой ответ здесь, чтобы заставить его работать.

Как использовать устаревший HTTP-клиент Apache на Android Marshmallow?

Другие вопросы по тегам