簡體   English   中英

'org.apache.http.HttpEntity'已棄用。如何在android studio中解決這個錯誤?

[英]'org.apache.http.HttpEntity' is deprecated. How to solve this error in android studio?

我正在使用android studio API22,我有這些錯誤:

'org.apache.http.HttpEntity' is deprecated
'org.apache.http.HttpResponse' is deprecated
'org.apache.http.NameValuePair' is deprecated
'org.apache.http.client.HttpClient' is deprecated
'org.apache.http.client.entity.UrlEncodedFormEntity' is deprecated
'org.apache.http.client.methods.HttpPost' is deprecated
'org.apache.http.impl.client.DefaultHttpClient' is deprecated
'org.apache.http.message.BasicNameValuePair' is deprecated
'org.apache.http.params.BasicHttpParams' is deprecated
'org.apache.http.params.HttpConnectionParams' is deprecated
'org.apache.http.params.HttpParams' is deprecated
'org.apache.http.util.EntityUtils' is deprecated

我怎么解決這個問題?

將此添加到您的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'
}

引用自己

如果您需要繼續使用HttpClient API,請考慮切換到OkHttp及其HttpClient兼容層,或考慮切換到Apache獨立的Android版HttpClient 否則,切換到HttpURLConnection或OkHttp的本機API。

或者,根據您使用HttpClient的內容,使用更具體的網絡庫(用於Web服務的Retrofit,用於圖像的Picasso或Universal Image Loader等)。

另請注意,HttpClient已從M Developer Preview的SDK中刪除,表明它將在下一版Android中刪除。 雖然有一種解決方法可以繼續在M中使用HttpClient ,但您確實需要轉移到其他方面。

Android現有的Apache HTTP客戶端版本非常老舊

谷歌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 針對Android的新Apache HttpClient軟件包 (如Apache建議的那樣 ),這可能會成為替代品。 只需將以下依賴項添加到build.gradle文件中(如果適用,更新版本號):

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

並在項目的任何地方用import cz.msebera.android.httpclient.*替換import org.apache.http.*

請注意,舊庫中的許多類已被棄用(例如HttpParamsThreadSafeClientConnManager ),因此重寫代碼可能是更好的解決方案。


編輯:在我們更新到較新的Http客戶端后,我發現了一些用戶在代理服務器后面遇到超時異常的情況。 由於代碼到處都是不滿的警告,我們認為嘗試解決問題並不值得。 在嘗試將其投入生產之前,我建議進行非常徹底的測試。

正如其他答案中所提到的,一個更好的解決方案是咬住子彈並切換到本機Android HttpUrlConnection ,或者如果這不符合您的需求,您可以使用庫OkHttp ,這是HttpUrlConnection 內部基於的無論如何

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

在Gradle中使用以下依賴項

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

這里下載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文件粘貼到其中。

將此添加到您的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'
}

這個庫可以讓你毫無問題地使用它,至少到目前為止我沒有任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM