Как одновременно отправлять изображение и текст с помощью дооснащения

Я хочу отправить эти Postdata и файл изображения одновременно с использованием модернизации.

PostData и Point

public class PostData implements Serializable {
    @Expose
    private String text;
    @Expose
    private Point point;
}
public class Point implements Serializable {
    @Expose
    private double longitude;
    @Expose
    private double latitude;
}

PostApiService

public interface PostApiService {

    @Multipart
    @POST("posts/")
    Call<ResponseBody> uploadFile (@Part MultipartBody.Part part, @Body PostData postData);
}

Я получаю URI изображения из этих кодов и буду его использовать. Он используется как returnUri. Вы можете подумать об этом.

КОД:

view.findViewById(R.id.btn_post).setOnClickListener(new View.OnClickListener() {
    @Override
    public void PostImageAndData(View view) {

        Bitmap bitmap = null;
        try {
            bitmap = getBitmapFromUri(returnUri); #this method is to make Bitmap from Uri
        } catch (IOException e) {
            e.printStackTrace();
        }
        File imageFile = null;
        try {
            imageFile = createFileFromBitmap(bitmap); #this method is to make File from Bitmap
        } catch (IOException e) {
            e.printStackTrace();
        }

        OkHttpClient client = new OkHttpClient();
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        client = builder.build();
        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(Constants.HTTP.BASE_URL)
                .build();

        PostApiService postApiService = retrofit.create(PostApiService.class);
        RequestBody requestFile =
                RequestBody.create(MediaType.parse("multipart/form-data"), imageFile);
        MultipartBody.Part body =
                MultipartBody.Part.createFormData("image", makeImageFileName(), requestFile); #this method(makeimageFileName()) is for custom filename 
        Point mpoint = new Point(13, 15);
        PostData postData = new PostData("hello", mpoint);

        Call<ResponseBody> call = postApiService.uploadFile(body, postData);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Toast.makeText(getContext(), "success?", Toast.LENGTH_LONG).show();
            }
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
            }
        });
    }
});

Если я использую @Body PostData postData в PostApiService, ошибка будет java.lang.IllegalArgumentException: @Body parameters cannot be used with form or multi-part encoding. (parameter #2)

и если я использую @Part PostData postData в PostApiService, ошибка будет java.lang.IllegalArgumentException: @Part annotation must supply a name or use MultipartBody.Part parameter type. (parameter #2)

Так что я должен делать?

Пожалуйста, не могли бы вы мне помочь?


person H.fate    schedule 18.09.2016    source источник


Ответы (1)


Вчера у меня была такая же проблема, и я решил ее.

Он прямо сказал, что два разных формата недопустимы. java.lang.IllegalArgumentException: параметры @Body нельзя использовать с кодированием формы или несколькими частями. (параметр # 2)

Вам необходимо отправлять все данные только в виде части.

@Multipart
@POST("/api/Accounts/editaccount")
Call<User> editUser (@Part("Authorization") String authorization,@Part("file\"; filename=\"pp.png\" ") RequestBody file , @Part("FirstName") RequestBody fname, @Part("Id") RequestBody id);

Что-то вроде этого.

Спасибо, надеюсь, это поможет вам.

person Saveen    schedule 18.09.2016
comment
Для меня использовать retrofit2 намного сложнее, чем я предполагал. Спасибо. Saveen - person H.fate; 18.09.2016
comment
Да, я тоже до вчерашнего дня :) Не волнуйся - person Saveen; 18.09.2016
comment
@Saveen, ты мне нужен здесь ... столкнулся с проблемой в многочастной вещи - ›stackoverflow.com/questions/63149093/ - person Wini; 29.07.2020