Caricare i dati multipart in JSON con Retrofit?

Vorrei fare una richiesta PUT con questo corpo JSON (contenente un'image) e con Retrofit. Sto usando sotto Android:

{ "Request": { "data": { "Key": "keydata", "param": { "title": "Testingpostmultipartimageupload", "photo": **"IMAGE BYTE DATA"** } } } } 

Qualsiasi indizio?

  • Asmack client di chat per server XMPP
  • Come rendere trasparente qualsiasi background di visualizzazione?
  • Android e iOS: come svilupparsi per entrambi?
  • Crashlytics (tessuto) organizzazioni separate per varianti di applicazione (tipi di costruzione, sapori di prodotto)
  • Come get il valore EditText e visualizzarlo sullo schermo tramite TextView?
  • Affrontare grandi bitmap (piegare una piccola bitmap per creare la carta da parati)
  • La class non è stata trovata quando si disconnette quando si passa Parcelable tramite Messenger a un servizio remoto
  • WebView shouldOverrideUrlLoading () non ha richiamato i collegamenti non validi
  • android.view.InflateException: file binario di file XML # 30: errore di gonfiaggio della class <ignota>
  • Inserimento dei valori nella mappa <K, V>
  • ListView non scorrevole all'interno di ScrollView
  • Android Studio 2.0 - il plugin è troppo vecchio, si prega di aggiornare a una versione più recente o impostare la variabile di ambiente ANDROID_DAILY_OVERRIDE a
  • 3 Solutions collect form web for “Caricare i dati multipart in JSON con Retrofit?”

    Ok, ho trovato una soluzione che utilizza molte parti, qualcosa di simile:

     @Multipart @PUT("/users/{id}") void modifyPic( @Header("auth_token") String token, @Path("id") int userid, @Part("request[data][param][title]") String title, @Part("request[data][param][Photo]") TypedFile avatar, Callback<User> cb ); 

    È necessario inserire i dati di image in byte utilizzando i dati di module multipart.

     try { HttpPost httppost = new HttpPost("some url"); MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("Image", new FileBody(image)); httppost.setEntity(multipartEntity); mHttpClient.execute(httppost, new YOURHANDLER()); } catch (Exception e) { Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e); } 

    Per submit richiesta post utilizzando i parametri

     HttpPost httpPost = new HttpPost(url); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); if (values != null) { for (Map.Entry<String, String> entry : values.entrySet()) { nameValuePairs.add( new BasicNameValuePair(entry.getKey(), entry.getValue())); } httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); } 

    Retrofit richiede solo multipart e requestbody per il suo multipart.

     Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("headerdata[relation][icon_type]") RequestBody icon_type, @Part("headerdata[relation][name]") RequestBody name, @Part MultipartBody.Part file); 

    E poi in java

      // MultipartBody.Part is used to send also the actual filename MultipartBody.Part body = MultipartBody.Part.createFormData("headerdata[relation][relative_image]", fileUpload.getName(), requestFile); call = service.loadLevel1halfIconswithImage(icon_type, name, body); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.