2015-08-25 7 views
8

Dopo aver aggiunto le seguenti modifiche in build.gradle subito dopo l'aggiornamento all'ultima API di Android livello 23 (Marshmallow) tutte le classi org.apache.http non funzionano.org.apache.http rimossi nel livello API 23. Qual è l'alternativa?

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.0" 

    defaultConfig { 
     applicationId "com.myapp.package" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 2 
     versionName "1.1" 
    } 
} 

Ho controllato "Rapporto differenze API Android" here. Dice che tutte le Classi di org.apache.http sono state rimosse. Qualcuno può suggerire qual è l'alternativa?

Ecco il mio codice:

try { 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(address); 

      httpPost.setEntity(new StringEntity("{\"longUrl\":\""+longUrl+"\"}")); 
      httpPost.setHeader("Content-Type", "application/json"); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 

      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

HttpClient era già obsoleto in Android L, quindi consiglio di utilizzare HttpURLConnection – user3641702

risposta

15

Vedi l'Behavior Changes a sviluppatori Android in cui si dice che:

Android versione 6.0 rimuove il supporto per il client HTTP Apache. Se la tua app utilizza questo client e utilizza Android 2.3 (livello API 9) o superiore, utilizza invece la classe HttpURLConnection. Questa API è più efficiente perché riduce l'utilizzo della rete attraverso la compressione trasparente e la cache di risposta e riduce al minimo il consumo di energia. Per continuare a utilizzare le API Apache HTTP, è necessario dichiarare la seguente dipendenza tempo di compilazione nel file build.gradle:

android { 
    useLibrary 'org.apache.http.legacy' 
} 
+0

Gradle non sembra riconoscere "useLibrary". Errore di seguito: Metodo DSL non trovato: 'useLibrary()' – techierishi

+6

@techierishi: assicurarsi di essere sulla versione 1.3.0 del plugin Gradle per Android. – CommonsWare

+0

Ho aggiunto useLibrary ma sto ancora ricevendo questo errore "Impossibile trovare la libreria facoltativa: org.apache.http.legacy" nella mia build? – umerk44

0

prega di fare riferimento this. L'alternativa class è menzionata nel sito Android Developer.

Le classi org.apache.http e la classe android.net.http.AndroidHttpClient sono state deprecate in Android 5.1. Queste classi non vengono più mantenute e dovresti migrare il più presto possibile qualsiasi codice app utilizzando queste API per le classi URLConnection.