2015-07-10 17 views
12

Sto testando Volley's HurlStack in Android M Developer Preview.Volley nell'anteprima Android M developer: org.apache.http non può essere risolto

Dopo essere passato ad compileSdkVersion22-'android-MNC', tutte le classi da org.apache.http non sono compilati:

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; 

Come posso modificare il mio codice per risolvere questo problema?

So che ci sono alcune modifiche relative al client HTTP Apache, ma non funziona ancora quando seguo i passaggi per aggiungere useLibrary 'org.apache.http.legacy' in gradle.

Riferimento: HurlStack.java AOSP

Behavior Changes: Apache HTTP Client Removal

+0

Apache HttpClient è stato deprecato per un po '. Volley utilizza HttpClient su vecchie versioni di Android, URLConnection su nuove versioni. Potrebbe essere che abbiano rimosso httpclient dall'anteprima M in tutto. L'errore non dovrebbe verificarsi quando si imposta la versione minima di Android su un livello in cui Volley utilizza URLConnection. – Christine

+1

oppure è possibile includere httpClient autonomamente. Come da qui: https://code.google.com/p/httpclientandroidlib/ – Christine

+0

@Christine Grazie per la risposta. Dalla https://developer.android.com/preview/setup-sdk.html sezione "Aggiorna un progetto esistente", Google suggerisce che minSdkVersion deve essere impostato su "MNC". Mi chiedo se c'è un modo ufficiale per bypassare questo. – Song

risposta

4

Gli ufficiali “comportamento cambia” documento states che il client HTTP Apache viene rimosso in Android M - non deprecato, ma rimosso. Personalmente suggerisco caldamente di passare a OkHttp che in realtà viene utilizzato come motore HttpURLConnection da KitKat, utilizzando una dipendenza si ottengono tutte le novità fresche direttamente dal team di Square.

0

Se, come me, l'unica ragione per cui siete stati includi HttpClient è perché si erano testando codici di risposta HTTP:.

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

quindi una semplice correzione è solo quello di utilizzare la versione delle costanti che si trovano nella classe HttpURLConnection:

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

Ma si noti che non tutti i codici di stato Http sono presenti nella classe HttpURLConnection. Ad esempio 307 per un reindirizzamento temporaneo non è più presente. – Mike

Problemi correlati