2016-08-29 6 views
6

Перед тем, как опубликовать этот вопрос здесь, я попытался добавить @Multipart выше метода интерфейса. И поиск в stackoverflow по-прежнему не может найти схожую с моей проблемой.Параметры @Part могут использоваться только с многострочной кодировкой. (параметр # 8)

В этом случае я пытаюсь отправить изображение с помощью TypedFile на сервер. Мой метод интерфейса выглядеть следующим образом:

@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

В этом методе мы можем видеть @Part и @Body. Если я добавить @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

Мы используем @Query только Get запрос и на самом деле @Query параметр Append в конец URL-адреса, см. примеры Doc.

Если вам нужно отправить профиля пользователя данные на сервер, используйте MultiPart

Составные части использовать один из преобразователей ДООСНАСТКЕ или они могут реализовать RequestBody обрабатывать свои собственные сериализации.

Например, в следующем примере мы отправляем фотографию профиля с некоторым описанием на сервер:

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

Вы можете добавить еще дополнительный атрибут тоже [дополнительный @Part]. См. Полный пример here, который шаг за шагом объясняю, как это сделать.

Редактировать: Как JackWarthon объяснить here, The @body аннотаций определяет единое тело запроса.

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

У меня все еще есть ошибка '@Body параметры не могут использоваться с формой или многочастной кодировкой. (параметр # 9) '. Это потому, что в последнем параметре есть '@ Body'. –

+0

@RBesar см. Отредактированный ответ. – Amir

 Смежные вопросы

  • Нет связанных вопросов^_^