Android 使用改型2.x运行并行请求
我有一个两个标签的应用程序。选项卡A用于将文件上载到服务器。选项卡B显示来自服务器的一些结果 文件上传改型2界面如下Android 使用改型2.x运行并行请求,android,file-upload,retrofit2,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); @
@Multipart
@POST("targetEndpoint")
Call<ResponseBody> uploadDocument(@Part("description") RequestBody description, @Part("fileId") RequestBody fileId, @Part MultipartBody.Part file);
@Multipart
@POST(“目标端点”)
调用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();
}
});
}
public void uploadDocument(文件fileToUpload、字符串mediaType、字符串fileId)引发ServiceUnavailableException{
//从文件实例请求正文
RequestBody requestFile=RequestBody.create(MediaType.parse(MediaType),fileToUpload);
MultipartBody.Part body=MultipartBody.Part.createFormData(“FileUpload”,fileToUpload.getName(),requestFile);
RequestBody description=RequestBody.create(MultipartBody.FORM,“文件描述”);
RequestBody customerIdBody=RequestBody.create(MediaType.parse(“text/plain”),fileId);
Call Call=上传文档(description,fileIdBody,body);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.i(getClass().toString(),“success”);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.i(getClass().toString(),“失败”);
t、 printStackTrace();
}
});
}
文件上传效果很好。但在文件上传过程中,如果我切换到选项卡B,尝试从服务器获取一些数据,则只有上传完成后才会处理这些数据
我知道改造使用执行器来排队请求。我认为这是一个限制,因为来自选项卡B的请求将延迟到文件上传结束
作为替代方案,我可以将上传逻辑移动到一个单独的线程,该线程使用通用HttpUrlConnection将数据推送到服务器
如果我做错了,请纠正我?有没有办法使用改型2同时处理两个请求?@commonware原来是阻止多个请求的服务器,改为多线程处理程序解决了这个问题!谢谢你的帮助。@commonware原来是阻止多个请求的服务器,改为多线程处理程序解决了这个问题!谢谢你的帮助。