2016-10-02 7 views
2

これは以前の質問と似ているかもしれませんが、 私はretrofit2を使って一つのリクエストで複数のフィールドや複数の画像を投稿する必要があると@Fieldは@FormUrlEncodedを必要とし@Partが必要ですので、私はRetrofit2の単一リクエストで@FieldMapと@Partを使用するとjava.lang.IllegalArgumentExceptionが発生します:1つのエンコーディングアノテーションのみが許可されています

java.lang.IllegalArgumentException: Only one encoding annotation is allowed.for method xxx 

私は

@Multipart 
@FormUrlEncoded 

を使用しています。このエラーを取得しています@Multipart。 もっと論理的なことは@FormUrlEncodedアノテーションを削除することですが、そこからどうやって行くのですか? 質問は、私の投稿を1回のリクエストで送信するためのタスクについてどうやったらいいですか?

ここインターフェース

@Multipart 
@FormUrlEncoded 
@POST("upload") 
Call<ResponseBody> uploadPost(@FieldMap Map<String, String> map, 
         @Part MultipartBody.Part image1, 
         @Part MultipartBody.Part image2, 
         @Part MultipartBody.Part image3); 

答えて

1
@Multipart 
@POST("upload") 
Call<ResponseBody> uploadPost(
     @PartMap() Map<String, RequestBody> descriptions, 
     @Part List<MultipartBody.Part> images); 

このインタフェースを使用するのです。

+0

なぜMapにRequestBodyがあるのですか?それにStringを使用することはできません。 – Herry

+0

はい、使用できます。しかし、あなたは文字列コンバータを使用する必要があります このポストを見て[リンク](http://stackoverflow.com/questions/35520012/get-string-response-body-from-retrofit2) –

関連する問題