2017-07-05 19 views
1

當我嘗試request in POSTMAN時,它工作正常。 但是,當我嘗試使用retrofit 2.0來做同樣的事情時;我總是收到錯誤500,我找不到我做錯了什麼!如何使用retrofit 2.0向圖像和其他細節數組發送jsonObject?

下面的代碼使用呼叫改造:

@Headers({"Content-Type: application/json"}) 
@POST("relatorio/{token}") 
Call<JsonObject> uploadJson(@Path("token") String token, @Body JsonObject auditoria); 

Call<JsonObject> call = uploadJson(details.get(KEY_TOKEN), json); 

而且,在這裏,我必須在調用中傳遞的參數的構造:

JsonObject json = new JsonObject(); 
JsonArray steps = new JsonArray(); 
steps.add(new JsonParser().parse(data.getStringExtra("json")).getAsJsonObject()); 
json.add("steps", steps); 
json.addProperty("title", basic.getString("title")); 
json.addProperty("description", basic.getString("description")); 
json.addProperty("autor", basic.getString("autor")); 
json.addProperty("responsavel", details.get(KEY_USERNAME)); 
json.add("imagens", prepare()); 

private JsonArray prepare(){ 
    Set<String> keys = JsonFormFragmentPresenter.imagesList.keySet(); 
    JsonArray imagens = new JsonArray(); 

    for(String k : keys){ 
     for(String path : JsonFormFragmentPresenter.imagesList.get(k)){ 
      if(!path.equals(null) && !path.equals("")){ 
       imagens.add(path); 
      } 
     } 
    } 

    JsonFormFragmentPresenter.imagesList.clear(); 
    return imagens; 
} 

謝謝

回答

0

你需要使用多部分格式

這裏是一個孔德樣品

@Multipart 
    @POST("sync/contact/image") 
    Call<Response> ImageUpload(@Part MultipartBody.Part file); 

    @Multipart 
    @POST("sync/image") 
    Call<ResponseBody> MultiImageUpload(@PartMap() Map<String, RequestBody> mapFileAndName); 


public static HashMap<String, RequestBody> GetAllImage(Context context) { 
     File files = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "/.ELMEX"); 
     File[] filesArray = files.listFiles(); 
     List<File> listOfNames = Arrays.asList(filesArray); 
     HashMap<String, RequestBody> map = new HashMap<>(listOfNames.size()); 
     RequestBody file = null; 

     for (int i = 0, size = listOfNames.size(); i < size; i++) { 
      file = RequestBody.create(MediaType.parse("multipart/form-data"), listOfNames.get(i)); 
      map.put("file\"; filename=\"" + listOfNames.get(i).getName() + ".jpg", file); 
      file = null; 
     } 

     return map; 
    } 


HashMap<String, RequestBody> map = UtilImage.GetAllImage(context); 

     Call<ResponseBody> call = Retro.getRetroWS().MultiImageUpload(map); 
     call.enqueue(new Callback<ResponseBody>() { 
      @Override 
      public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
       Log.d(TAG, "onResponse: "); 
      } 

      @Override 
      public void onFailure(Call<ResponseBody> call, Throwable t) { 
       Log.d(TAG, "onFailure: "); 
      } 
     }); 
+0

我會試試這個代碼;但是,它只是發送圖像的權利?我也需要發送其他JSON字段。 – Tarcisio

+0

它仍然返回500錯誤 – Tarcisio

相關問題