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?

  • Barra di stato non visualizzabile - 5.0 Lollipop Android Studio: (AppCompat-v7: r21)
  • il contenuto dell'applicazione va dietro la barra di navigazione in android L
  • Quando il frammento dell'interruttore con SwipeRefreshLayout durante il rinfrescamento, il frammento si blocca ma in realtà funziona ancora
  • setOnTabSelectedListener is deprecated viene richiesto quando si crea il layout di tabulazione
  • Interpretazione YUV_420_888 su Samsung Galaxy S7 (Camera2)
  • l'aidl manca dello studio android
  • I frammenti nidificati scompaiono durante l'animation di transizione
  • Qual è il modo più veloce per imparare Android e iniziare rapidamente a sviluppare applicazioni?
  • Problema di collapseMode di Toolbar di Android
  • Thread Android per un timer
  • Fai scoprire Bluetooth in Android 2.1 per un tempo indefinito
  • Come mantenere correttamente l'indicatore di posizione corrente in Google Maps v2 android
  • 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.