2015-05-31 18 views
13

sto usando Android in studio API22 e ho questi errori:'org.apache.http.HttpEntity' è obsoleto. Come risolvere questo errore in Android Studio?

'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 

Come posso risolvere questo problema?

+2

Non è un errore. È un avvertimento Dovresti leggere la documentazione. Ci deve essere un suggerimento su quale classe si dovrebbe usare – Jens

+0

ci sono 4 suggerimenti: – Sml

+0

opzioni 'Approvazione dell'uso dell'API': modifica l'impostazione del profilo di ispezione e Annotazione della classe 'HttpEntity' come @Deprecated: modifica delle impostazioni dell'intenzione. quali opzioni dovrei andare per ?? non ho davvero idea di cosa significano – Sml

risposta

7

Citando myself:

Se è necessario continuare ad utilizzare l'API HttpClient, passare ad OkHttp e loro HttpClient livello di compatibilità, o passare ad Apache’s separate Android edition of HttpClient. Altrimenti, passa a HttpURLConnection o all'API nativa di OkHttp.

Oppure, a seconda di cosa si sta utilizzando HttpClient, utilizzare una libreria di rete più specifica (Retrofit per servizi Web, Picasso o Universal Image Loader per immagini, ecc.).

Si noti inoltre che HttpClient viene rimosso dall'SDK per l'anteprima M Developer, a indicare che verrà rimosso nella prossima edizione di Android. Mentre c'è lo a workaround to continue using HttpClient in M, devi davvero passare a qualcos'altro.

+0

c'è una semplice sostituzione per quelle classi in API? – Sml

+0

@lamriassia: Non ho idea di cosa tu consideri "semplice" e cosa consideri "in API". Ho elencato diverse sostituzioni nella mia risposta (HttpClient API di OkHttp, HttpClient di sostituzione di Apache, usando OkHttp direttamente, HttpUrlConnection, Retrofit, Picasso e Universal Image Loader). Dovrai decidere da solo quali di queste sono "semplici" e quali, se ce ne sono, in "API". – CommonsWare

+0

ok, grazie mille – Sml

4

La versione del client HTTP Apache fornita su Android di magazzino era very very old.

Google Android 1.0 è stato rilasciato con un'istantanea pre-BETA di Apache HttpClient. In concomitanza con la prima versione di Android, le API Apache HttpClient 4.0 dovevano essere congelate prematuramente, mentre molte delle interfacce e delle strutture interne non erano ancora completamente elaborate. Con la scadenza di Apache HttpClient 4.0, il progetto si aspettava che Google incorporasse gli ultimi miglioramenti del codice nella loro struttura del codice. Sfortunatamente non è successo.

Se non si desidera passare a una nuova API è possibile aggiungere manualmente una versione più recente della libreria Apache HttpClient nel progetto per sostituire la vecchia versione obsoleta in Android SDK < 22.

Il modo più semplice per eseguire questa operazione quando si seleziona l'SDK 23+ consiste nell'utilizzare il nuovo Apache HttpClient package for Android di Marek Sebera (come suggested by Apache), che potrebbe potenzialmente funzionare come una sostituzione drop-in. Basta aggiungere la seguente dipendenza al file build.gradle (l'aggiornamento del numero di versione, se del caso):

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

e sostituirlo con import org.apache.http.*import cz.msebera.android.httpclient.* ovunque nel progetto.

Si noti che molte classi della vecchia libreria sono deprecate (ad esempio HttpParams,), quindi riscrivere il codice sarà probabilmente una soluzione migliore.


Edit: Ho trovato alcuni casi in cui gli utenti sono stati ottenendo eccezioni timeout quando dietro server proxy dopo abbiamo aggiornato al client HTTP più recente. Poiché il codice è pieno di avvertimenti obsoleti ovunque, abbiamo deciso che non valeva la pena tentare di risolvere il problema. Raccomando di testare molto accuratamente prima di provare a metterlo in produzione.

Come accennato in altre risposte, una soluzione molto migliore è quello di stringere i denti e passare a uno il nativo Android HttpUrlConnection, o se questo non soddisfa le vostre esigenze, è possibile utilizzare la libreria OkHttp, che è ciò che HttpUrlConnection è internally based upon anyway.

+2

Eccoci qui, dicembre 2015, e dopo aver aggiunto 'cz.msebera.android.httpclient 4.4.1.1' nella mia app build.gradle, Android Studio 1.5, sdk 23, dice che' HttpParams, HttpConnectionParams, BasicHttpParams, HttpProtocolParams' e' DefaultHttpClient' sono deprecati. Sembra che dovrò ricodificare tutto da zero. –

17

Aggiungi questo al vostro Gradle

useLibrary 'org.apache.http.legacy' 

Esempio

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' 
} 
+0

La versione di msebera è 1.1mb, piuttosto un sovraccarico per una piccola app. La versione precedente è 297k. okhttp + jar di compatibilità totale 382kb - e incoraggerebbe il passaggio a una moderna API - ma il livello di compatibilità non copre abbastanza classi per me. – NeilS

3

HttpClient deperected da Android lecca 5.1 (API 22): -
Ma ancora possiamo usare HttpClient utilizzando seguente codice in Android studio: -
Goto app \ build.gradle file:

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

     useLibrary 'org.apache.http.legacy' 
    } 

[o alternativo]


Scaricare e aggiungere HttpClient jar file al progetto o utilizzare okHttp.

0

Scaricare il file jar org.apache.http.legacy da here.

Nel file build.gradle, digitare il seguente codice

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

Salvare il file .jar scaricato nel seguente percorso

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

Sto usando Android-23 sotto le piattaforme, dipende da quale Livello API che stai utilizzando. Se la cartella opzionale non esiste, creare la cartella opzionale e incollare il file .jar al suo interno prima di sincronizzare il progetto gradle.

0

Uso seguito dipendenza nella vostra Gradle

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

Aggiungi questo al vostro Gradle

useLibrary 'org.apache.http.legacy' 

Esempio

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' 
} 

Questa libreria vi permetterà di utilizzarlo senza problemi, almeno Non ho avuto alcun problema fino ad ora con esso.

+0

Sembra una copia esatta della risposta di @bfacumat – Jens

Problemi correlati