2016-08-29 30 views
6

私はここにこの質問を投稿する前に、私は@Multipart上記のインターフェイスメソッドを追加しようとしているとstackoverflowで検索しても、私の問題と同様に見つけることができません。@Partパラメータは、マルチパートエンコーディングでのみ使用できます。 (パラメータ#8)

この場合、サーバーにTypedFileを使用して画像を送信しようとしています。私たちは@Part@Bodyを見ることができる方法で

@Headers({"Content-type: application/json"}) 
    @POST("/user/change") 
    void postChange(@Query("name") String name, @Query("email") String email, @Query("password") String password, @Query("phone") String phone, @Query("user_id") String userId, @Query("address[]") String[] listAddress, @Query("head[]") String[] head, @Part("photo_profile") TypedFile photoProfile, @Body TypedInput jsonObject, Callback<ReceiveDTO> callback); 

EDIT

:私のインターフェイスメソッドは次のようになり。私は上記の方法@Multipartを追加した場合、それは我々は、エラー@Body parameters cannot be used with form or multi-part encoding. (parameter #9)

がスローされます私はレトロフィット1.9に

+0

私はここでの例に従うことをお勧め - あなたが問題で、その後マルチパート・編集質問を使用してhttps://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server向いている –

答えて

4

を使用しています我々は唯一のGet要求と実際に@queryアペンドパラメータと@queryを使用URLの最後、Docの例を参照してください。

あなたはレトロフィットのコンバータのいずれかを使用するか、彼らは自分のシリアル化を処理するために RequestBodyを実装することができますMultiPart

マルチパート部分、サーバーに使用したユーザプロファイル情報を送信する必要がある場合。例えば

例を以下に私たちは、サーバーにいくつかの説明とプロフィール写真を送信します。

@Multipart 
@PUT("user/photo") 
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description); 

あなたはそれ以上の追加の属性すぎ[追加@Part]を追加することができます。完全な例hereを参照してください。これはどのようにこれを行うか説明します。

編集:JackWarthonはhereを説明するように、@Body注釈は、単一の要求の本体を画定します。

interface Foo { 
    @POST("/jayson") 
    FooResponse postJson(@Body FooRequest body); 
} 
+0

私はまだ '@Bodyパラメータはフォームまたは複数部分のエンコーディングで使用できません。 (パラメータ#9) 'となる。最後のパラメータに '@ Body'があるからです。 –

+0

@RBesar編集済みの回答を参照してください。 – Amir

関連する問題