我是一个两个标签式应用程序。选项卡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同时处理这两个请求?