Получение NoSuchFieldError INSTANCE org/apache/http/message/BasicHeaderValueParser

Я работаю над приложением на Android. Я использую httpcore 4.3.3. Я получаю это, когда я пытаюсь использовать ContentType.parse(string)

java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueParser; in class Lorg/apache/http/message/BasicHeaderValueParser; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueParser' appears in /system/framework/ext.jar)

Я немного погуглил и понимаю, почему получаю ошибку, но не уверен, как ее исправить. Из того, что я прочитал, кажется, что ContentType пытается использовать BasicHeaderValueParser, который поставляется с Android, и у этого класса еще нет поля INSTANCE. Любая помощь, пожалуйста?

Это соответствующий импорт:

compile('org.apache.httpcomponents:httpmime:4.3.6') {
    exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpcore:4.3.3'

4 ответа

Решение

К сожалению, стоковые версии HttpCore нельзя использовать в Android. Пожалуйста, используйте Apache HttpClient Android Port, который также включает в себя необходимые классы HttpCore

compile('org.apache.httpcomponents:httpmime:4.3.6') {
    exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'

Загрузите последнюю версию файла Apache Httpclient Jar и переименуйте путь. Это подходит для меня.

Похоже, вы используете несовместимые jar для httpmime и httpclient-android. Попробуйте использовать версию 4.3.6 httpmime

Просто добавьте httpmime_4.3.6.jar файла версии 4.3.6 в папку lib и добавьте

файлы реализации ('lib/httpmime-4.3.6.jar') в gradle(уровень приложения)

Простое решение заключается в использовании:

https://code.google.com/p/httpclientandroidlib/

Это порт Appache HttpClient для android wrap с другим именем пакета, чтобы не мешать существующей версии в Android. Импортируйте jar-файл в проект Android и вместо "org.apache.http" используйте "ch.boye.httpclientandroidlib".

Примечание. Если вы одновременно используете apache httpmime и модификацию, используйте более старую версию apache httpmime.

(например: в моем случае я использовал это для загрузки изображения на сервер, а также для получения длины содержимого / размера изображения)

Это его более старая версия (не такая уж старая) или предыдущая версия, вы должны реализовать одну и ту же старую версию для обоих.

реализация 'com.squareup.retrofit2:retrofit:2.0.2' реализация 'org.apache.httpcomponents:httpmime:4.3.6'

Это новая версия модернизации. Вам следует использовать старую версию apache httpmime.

реализация 'com.squareup.retrofit2:retrofit:2.3.0' реализация 'org.apache.httpcomponents:httpmime:4.3.6'

Большое спасибо, если вам понравилось мое решение, пожалуйста, проголосуйте за меня.

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