2015-12-14 24 views
21

Ho passato un sacco di post in SO e altri tuts. Ma non ho potuto ottenere nessun altro ufficiale o altro post che non contenga alcun codice deprecato per il caricamento di più immagini usando volley.Vengo a conoscenza di Apache Rimozione del client HTTP e correlati nel nuovo Android M e preferibilmente da usare qui sotto.Caricamento di più immagini con il tiro al volo?

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

Quindi, uno può darmi una mano per fare multipla caricamento delle immagini con il nuovo deprecato meno classe volley aggiornato?

+0

** okhttp **. dai un'occhiata qui: https://github.com/square/okhttp/wiki/Recipes#posting-a-multipart-request – rafid059

risposta

3

È possibile utilizzare l'ultima versione di scarica da here. È uno specchio non ufficiale con qualche piccola correzione di bug e il codice sorgente verrà sincronizzato periodicamente con il repository ufficiale di volley.

per Gradle

compile 'com.mcxiaoke.volley:library:1.0.19' 

oppure è possibile scaricare la versione compilata da here

Ora è possibile utilizzare la classe di seguito allegata per fare richiesta multipart utilizzando volley con l'aiuto di MultipartEntityBuilder in org.apache.http.entity.mime senza avere un codice deprecato.

CustomMultipartRequest.java

utilizzo Esempio

//Auth header 
Map<String, String> mHeaderPart= new HashMap<>(); 
mHeaderPart.put("Content-type", "multipart/form-data;"); 
mHeaderPart.put("access_token", accessToken); 

//File part 
Map<String, File> mFilePartData= new HashMap<>(); 
mFilePartData.put("file", new File(mFilePath)); 
mFilePartData.put("file", new File(mFilePath)); 

//String part 
Map<String, String> mStringPart= new HashMap<>(); 
mStringPart.put("profile_id","1"); 
mStringPart.put("imageType", "ProfileImage"); 

CustomMultipartRequest mCustomRequest = new CustomMultipartRequest(method, mContext, url, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject jsonObject) { 
       listener.onResponse(jsonObject); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       listener.onErrorResponse(volleyError); 
      } 
     }, mFilePartData, mStringPart, mHeaderPart); 

entrambi i casi è possibile utilizzare httpmime-4.3.5.jar e httpcore-4.3.2.jar per ottenere l'accesso di MultipartEntityBuilder e altri metodi che viene utilizzato per effettuare la richiesta o aggiungere quanto segue nel Gradle se la tua API di targeting 23 e successive.

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

Qualsiasi modo sto usando del vaso menzionato ed è funziona come un fascino in Android M anche.

Aggiornamento

Si prega di notare, com.mcxiaoke.volley:library:1.0.19 deprecato e non più mantenuto, si prega di utilizzare la versione ufficiale del jCenter.

compile 'com.android.volley:volley:1.0.0' 
+0

Grazie @Anoop M funziona senza alcun deprecato codice. :) – Stella

+0

In realtà, Volley di mcxiaoke utilizza ancora API22, puoi vedere su https://github.com/mcxiaoke/android-volley/blob/master/gradle.properties :) – BNK

+0

Grazie per aver condiviso l'uomo, cosa dovrei sostituire con mcontext con ? – H4F

2

In questo momento, la libreria di Volley (sia di Google che di mcxiaoke) utilizza ancora la libreria di Apache all'interno delle sue numerose classi. Se si desidera comunque utilizzare Volley senza alcuna dipendenza Apache, è necessario utilizzarlo come modulo all'interno del progetto e modificarne il file del codice sorgente.

è possibile fare riferimento a my GitHub sample code, lì troverete che ho personalizzato alcune classi come NetworkResponse, HttpHeaderParser, BasicNetwork, HurlStack, Volley ... Per la richiesta più parti, si prega di utilizzare il file MultipartActivity.java.

Vedrete build.gradle contenuto del file:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "com.example.volleynoapache" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
} 

Un'altra buona soluzione alternavite, secondo me, sta utilizzando OkHttp, ho avuto anche un codice di esempio di lavoro a GitHub, si prega di dare un'occhiata.

Spero che aiuti!

+0

Grazie per il tuo aiuto BNK.but in realtà voglio fare questo usando la dipendenza Apache. – Stella

+0

Oh! Quindi cosa intendi con 'deprecated less'? Se vuoi comunque, leggi il mio link su http://stackoverflow.com/questions/32240177/working-post-multipart-request-with-volley-and-without-httpentity – BNK