2017-06-29 13 views
1

私は以下のコードを使用して自分のサーバーに画像やその他の詳細をアップロードしようとしている問題を抱えている:レトロフィット - エラー400

public static final String APP_JSON = "Content-Type: application/json"; 

@Multipart 
@Headers({ApiClient.APP_JSON}) 
@POST("relatorio/{token}") 
Call<JsonObject> uploadJson(@Path("token") String token, @Part("json") JsonObject auditoria, @Part List<MultipartBody.Part> files); 

それは常に原因でSyntaxErrorにERRO 400を返す:予期しないトークン-<br>。しかし、私がRequestBodyとして詳細だけを送っても動作します。

アップロードする画像の配列を自分のサーバーで定義したとおりに構築する必要があります。このように、私はそれを使用しています:

Call<JsonObject> call = ApiClient.get().uploadJson(details.get(KEY_TOKEN), json, prepare()); 
call.enqueue(new Callback<JsonObject>() { 
    @Override 
    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) { 
     Log.e("Status", new Gson().toJson(response)); 
    } 

    @Override 
    public void onFailure(Call<JsonObject> call, Throwable t) { 
     Log.e("Status", "Faild"); 
     Log.e("UPDATErr", new Gson().toJson(t)); 
    } 
}); 

なぜそれが動作していない上の任意のヒント:その後

private List<MultipartBody.Part> prepare(){ 
    Set<String> keys = JsonFormFragmentPresenter.imagesList.keySet(); 
    List<MultipartBody.Part> parts = new ArrayList<>(); 

    for(String k : keys){ 
     for(String path : JsonFormFragmentPresenter.imagesList.get(k)){ 
      if(!path.equals(null) && !path.equals("")){ 
       File image = new File(path); 

       RequestBody requestFile = RequestBody.create(
         MediaType.parse("multipart/form-data"), image 
       ); 

       Log.e("Test", (requestFile == null) + ""); 
       parts.add(MultipartBody.Part.createFormData("imagens", image.getName(), requestFile)); 
      } 
     } 
    } 

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

私は常に400を返して電話をかけますか?あなたは、コンテンツタイプと@Header注釈を使用している

答えて

0

は、ありがとうございます。アプリケーション/ JSONをしますが、別のコンテンツタイプを使用してマルチパートPOSTリクエストが必要です。 @Headerアノテーションを削除して、@ Multipartで置き換えてください。

+0

今はerr104 –

+0

104を投げていますか?本気ですか? –

+0

はい、エラー(104)接続がピアによってリセットされました –