'org.apache.http.HttpEntity'已弃用。如何在android studio中解决这个错误?

时间:2015-05-31 10:58:25

标签: java android apache-httpclient-4.x

我正在使用android studio API22,我有这些错误:

jumedge[0]

我该如何解决这个问题?

7 个答案:

答案 0 :(得分:18)

将此添加到您的gradle

useLibrary 'org.apache.http.legacy'

实施例

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 2
    versionName "1.0.1"
}
buildTypes {
    release {
        debuggable false
        signingConfig signingConfigs.releaseConfig
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debugSigned {
        debuggable true
        signingConfig signingConfigs.releaseConfig
    }
    debug {
        debuggable true
    }
}
useLibrary 'org.apache.http.legacy'
}

答案 1 :(得分:7)

引用myself

  

如果您需要继续使用HttpClient API,请考虑切换到OkHttp及其HttpClient兼容层,或考虑切换到Apache’s separate Android edition of HttpClient。否则,切换到HttpURLConnection或OkHttp的本机API。

或者,根据您使用HttpClient的内容,使用更具体的网络库(用于Web服务的Retrofit,用于图像的Picasso或Universal Image Loader等)。

另请注意,HttpClient已从用于M Developer Preview的SDK中删除,表明它将在下一版Android中删除。虽然有a workaround to continue using HttpClient in M,但你真的需要转向别的东西。

答案 2 :(得分:5)

Android上提供的Apache HTTP客户端版本为very very old

  

谷歌Android 1.0发布时带有Apache HttpClient的BETA前快照。为了配合第一个Android版本,Apache HttpClient 4.0 API必须过早冻结,而许多接口和内部结构仍未完全解决。随着Apache HttpClient 4.0的日趋成熟,该项目期待Google将最新的代码改进整合到他们的代码树中。不幸的是,它没有发生。

如果您不想切换到新的API,可以手动将更新版本的Apache HttpClient库添加到项目中,以替换Android SDK中旧的弃用版本< 22.

在定位SDK 23+时,最简单的方法是使用Marek Sebera的新Apache HttpClient package for Android(作为suggested by Apache),这可能会成为替代品。只需将以下依赖项添加到build.gradle文件中(如果适用,更新版本号):

compile "cz.msebera.android:httpclient:4.4.1.1"

并在项目的任何位置用import org.apache.http.*替换import cz.msebera.android.httpclient.*

请注意,旧库中的许多类已被弃用(例如HttpParamsThreadSafeClientConnManager),因此重写代码可能是更好的解决方案。

编辑我发现在我们更新到新的Http客户端之后,当代理服务器落后于用户时会出现超时异常的情况。由于代码在各处都充满了弃用的警告,我们认为尝试解决问题并不值得。在尝试将其投入生产之前,我建议进行非常彻底的测试。

正如其他答案中所提到的,一个更好的解决方案是咬紧牙关并切换到原生Android HttpUrlConnection,或者如果它不能满足您的需求,您可以使用库{ {1}},OkHttpinternally based upon anyway

答案 3 :(得分:3)

HttpClient取决于android lollypop 5.1(API 22): -
但是我们仍然可以在Android studio中使用以下代码来使用HttpClient: -
转到app \ build.gradle文件:

defaultConfig {
        applicationId "com.XXXXX.XXX"
        minSdkVersion 16
        targetSdkVersion 23
        -----------
        -----------

        useLibrary 'org.apache.http.legacy'
    }

[或替代]


下载并添加HttpClient jar个文件到您的项目或使用okHttp

答案 4 :(得分:1)

在Gradle中使用以下依赖关系

dependencies {
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

答案 5 :(得分:0)

here下载org.apache.http.legacy jar文件。

build.gradle文件中,输入以下代码

defaultConfig {
      useLibrary 'org.apache.http.legacy'
}

将下载的.jar文件保存在以下位置

./sdk/platforms/android-23/optional/(.jar file)

我在平台下使用android-23,它取决于你使用的是哪个API级别。如果可选文件夹不存在,请创建可选文件夹并在同步gradle项目之前将.jar文件粘贴到其中。

答案 6 :(得分:0)

将此添加到您的gradle

useLibrary 'org.apache.http.legacy'

实施例

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 2
    versionName "1.0.1"
}
buildTypes {
    release {
        debuggable false
        signingConfig signingConfigs.releaseConfig
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debugSigned {
        debuggable true
        signingConfig signingConfigs.releaseConfig
    }
    debug {
        debuggable true
    }
}
useLibrary 'org.apache.http.legacy'
}

这个库可以让你毫无问题地使用它,至少到目前为止我还没有遇到任何问题。