为什么不能使用Retrofit2上传图像和数据?

时间:2019-11-29 08:29:15

标签: android retrofit2

关于,我必须上传这些数据。

postman

我有这段代码。

客户创建

public  BeeMappingClient(String url){

    retrofit= new  Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    conexion=retrofit.create(Conexion.class);
}

接口

@Multipart
@POST("task")
Call<ResponsetTask> API_Task(@Header("Authorization") String key,
                             @Part MultipartBody.Part multipartImage,
                             @Part("message") RequestBody message ,
                             @Part("filecomment") RequestBody filecomment,
                             @Part("api_token") RequestBody api_token,
                             @Part("user_id") RequestBody user_id);

然后致电

File file=new File(path);

    MultipartBody.Part[] multipartImageList = new MultipartBody.Part[1];
    RequestBody surveyBody = RequestBody.create(MediaType.parse("image/*"), file);
    multipartImageList[0] = MultipartBody.Part.createFormData("image", "image.jpg", surveyBody);
    RequestBody message = RequestBody.create(MediaType.parse("message"), Constantes.MESSAGE);
    RequestBody filecomment = RequestBody.create(MediaType.parse("filecomment"), Constantes.FILECOMMENT);
    RequestBody api_token = RequestBody.create(MediaType.parse("api_token"),Constantes.api_token);
    RequestBody user_id = RequestBody.create(MediaType.parse("user_id"), Integer.toString(Constantes.id));

    Call<ResponsetTask> call = conexion.API_Task(Constantes.AUTH,multipartImageList[0],message,filecomment,api_token,user_id);
    call.enqueue(new Callback<ResponsetTask>() {
        @Override
        public void onResponse(Call<ResponsetTask> call, Response<ResponsetTask> response) {
            Constantes.api_task=response.body().getTaskId();
        }

        @Override
        public void onFailure(Call<ResponsetTask> call, Throwable t) {

        }
    });

问题是它什么也不做,如果我进行调试,直到到达call.enqueu为止一切似乎都进行得很顺利……我应该输入OnResques或OnFailure,但它不仅会结束好像它不存在的方法。 我该怎么办?,这是上传此数据的最佳方法?。 在此先感谢您提供的任何帮助或指导。

2 个答案:

答案 0 :(得分:0)

 RequestBody surveyBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);

用“ multipart / form-data”替换“ image / *”

答案 1 :(得分:0)

尝试一下-对于多方请求

界面

    @Multipart
    @POST("task")
    Call<ResponseBody> submitRegistration(@Part MultipartBody.Part body,
    @Part("message") RequestBody message)

传递值-

    File file = new File(path);        
    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
    RequestBody message = RequestBody.create(MediaType.parse("text/plain"), Constantes.MESSAGE);

致电-

Call<ResponseBody> call = service.callApi(body,message);