2016-08-29 28 views
6

Trước khi tôi đăng câu hỏi này ở đây, tôi đã cố gắng thêm @Multipart phương thức giao diện trên và tìm kiếm trong stackoverflow vẫn không thể tìm thấy tương tự với vấn đề của tôi.Các tham số @Part chỉ có thể được sử dụng với mã hóa nhiều phần. (tham số # 8)

Trong trường hợp này, tôi cố gắng gửi hình ảnh bằng cách sử dụng TypedFile đến máy chủ. My phương pháp giao diện nhìn như thế này:

@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

Trong phương pháp mà chúng ta có thể thấy @Part@Body. Nếu tôi thêm @Multipart trên phương pháp, nó chúng tôi sẽ ném ra một lỗi @Body parameters cannot be used with form or multi-part encoding. (parameter #9)

Tôi đang sử dụng Retrofit 1,9

+0

tôi sẽ đề nghị làm theo ví dụ ở đây - https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server sử dụng nhiều phần dữ liệu và sau đó chỉnh sửa câu hỏi với vấn đề bạn đang đang đối mặt với –

Trả lời

4

Chúng tôi sử dụng @Query chỉ với Get Yêu cầu và trong thực tế @Query tham số append tại cuối URL, xem Doc ví dụ.

Nếu bạn cần gửi thông tin lý lịch thành viên đến máy chủ, sử dụng MultiPart

phần Multipart sử dụng một trong những bộ chuyển đổi Retrofit hoặc họ có thể thực hiện RequestBody để xử lý serialization riêng của họ.

Ví dụ trong theo gương chúng tôi gửi hồ sơ ảnh với một số mô tả đến máy chủ:

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

Bạn có thể bổ sung thêm nhiều thuộc tính quá [thêm @Part]. Xem ví dụ hoàn chỉnh here từng bước tôi giải thích cách thực hiện điều này.

Sửa: Như JackWarthon giải thích here, The @Body chú thích định nghĩa một cơ thể yêu cầu duy nhất.

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

Tôi vẫn gặp lỗi 'Không thể sử dụng thông số Body với mã hóa biểu mẫu hoặc đa phần. (tham số # 9) '. Bởi vì có '@ Body' trong tham số cuối cùng. –

+0

@RBesar xem câu trả lời đã chỉnh sửa. – Amir

Các vấn đề liên quan