使用Retrofit 2.x运行并行请求

时间:2017-09-03 21:20:50

标签: android file-upload retrofit2

我是一个两个标签式应用程序。选项卡A用于将文件上载到服务器。选项卡B显示服务器的一些结果。

文件上传的改造2界面如下

@Multipart
@POST("targetEndpoint")
Call<ResponseBody> uploadDocument(@Part("description") RequestBody description, @Part("fileId") RequestBody fileId, @Part MultipartBody.Part file);

实施是

public void uploadDocument(File fileToUpload, String mediaType, String fileId) throws ServiceUnavailableException {
    //request body from file instance
    RequestBody requestFile = RequestBody.create(MediaType.parse(mediaType), fileToUpload);

    MultipartBody.Part body = MultipartBody.Part.createFormData("FileUpload", fileToUpload.getName(), requestFile);

    RequestBody description = RequestBody.create(MultipartBody.FORM, "File Description");
    RequestBody customerIdBody = RequestBody.create(MediaType.parse("text/plain"), fileId);

    Call<ResponseBody> call = uploadDocument(description, fileIdBody, body);

    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            Log.i(getClass().toString(), "success");
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.i(getClass().toString(), "failed");
            t.printStackTrace();
        }
    });
}

文件上传效果很好。但是在文件上传期间,如果我切换到选项卡B,尝试从服务器获取一些数据,只有在上传完成后才会处理。

我了解Retrofit使用Executors排队请求。我认为这是一个限制,因为来自标签B的请求将被延迟,直到文件上传结束。

作为替代方案,我可以将上传逻辑移动到一个单独的线程,该线程使用通用的HttpUrlConnection将数据推送到服务器。

如果我做错了,请纠正我?有没有办法使用Retrofit 2同时处理这两个请求?

0 个答案:

没有答案