Java 使用OkHTTP发送多个请求
我正在使用OkHTTP发送多个图像。由于所有请求都是异步的,所以在所有请求完成之前,我无法运行最后一个调用。如何在OkHTTP中实现这一点 发送完所有图像后,我需要运行RunFinalRequest()。我尝试的是,我将RunFinalRequest()放在OnResponse()上,但有时即使有响应也无法通过。有更好的方法吗 这是我的密码Java 使用OkHTTP发送多个请求,java,android,okhttp,Java,Android,Okhttp,我正在使用OkHTTP发送多个图像。由于所有请求都是异步的,所以在所有请求完成之前,我无法运行最后一个调用。如何在OkHTTP中实现这一点 发送完所有图像后,我需要运行RunFinalRequest()。我尝试的是,我将RunFinalRequest()放在OnResponse()上,但有时即使有响应也无法通过。有更好的方法吗 这是我的密码 public void SendALL(){ OkHttpClient client = new OkHttpClient(); clie
public void SendALL(){
OkHttpClient client = new OkHttpClient();
client.dispatcher().setMaxRequestsPerHost(50);
final MediaType MEDIA_TYPE = MediaType.parse("image/png");
for (int i = 0; i < images.size(); i++){
File sourceFile = new File(images.get(i).getImageURI());
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image", sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile))
.addFormDataPart("name", images.get(i).getJobID())
.build();
Request request = new Request.Builder()
.url("xxxxxxxxxxx")
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
if(signatures.size() > 0){
File sourceFile = new File(Uri.parse(signatures.get(0).getImageURI()).toString());
String newJobID = signatures.get(0).getJobID().concat("-signature");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image", sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile))
.addFormDataPart("name", newJobID)
.build();
Request request = new Request.Builder()
.url("XXXXXXXXXXX")
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
RunFinalRequest();
public void SendALL(){
OkHttpClient=新的OkHttpClient();
client.dispatcher().setMaxRequestsPerHost(50);
final MediaType MEDIA_TYPE=MediaType.parse(“image/png”);
对于(int i=0;i0){
File sourceFile=新文件(Uri.parse(signatures.get(0.getImageURI()).toString());
字符串newJobID=signatures.get(0.getJobID().concat(“-signature”);
RequestBody RequestBody=新的MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(“image”,sourceFile.getName(),RequestBody.create(媒体类型,sourceFile))
.addFormDataPart(“名称”,newJobID)
.build();
Request Request=newrequest.Builder()
.url(“XXXXXXXXXX”)
.post(请求主体)
.build();
client.newCall(request).enqueue(new Callback()){
@凌驾
公共void onFailure(调用调用,IOE异常){
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
}
});
}
RunFinalRequest();
您可以尝试以下机制:
private int uploadedImageCount;
...
public void sendAll() {
uploadedImageCount = 0;
OkHttpClient client = new OkHttpClient();
client.dispatcher().setMaxRequestsPerHost(50);
MediaType MEDIA_TYPE = MediaType.parse("image/png");
for (int i = 0; i < images.size(); i++) {
File sourceFile = new File(images.get(i).getImageURI());
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image", sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile))
.addFormDataPart("name", images.get(i).getJobID())
.build();
Request request = new Request.Builder()
.url("xxxxxxxxxxx")
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
onImageUploadFailed();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
onImageUploaded();
} else {
onImageUploadFailed();
}
}
});
}
if (signatures.size() > 0) {
File sourceFile = new File(Uri.parse(signatures.get(0).getImageURI()).toString());
String newJobID = signatures.get(0).getJobID().concat("-signature");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image", sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile))
.addFormDataPart("name", newJobID)
.build();
Request request = new Request.Builder()
.url("XXXXXXXXXXX")
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
}
public void onImageUploaded() {
uploadedImageCount++;
if (uploadedImageCount == images.size()) {
runFinalRequest();
}
}
public void onImageUploadFailed() {
// Handle failure case. You may detect failed image and try to resend
}
private int uploadedImageCount;
...
公共void sendAll(){
uploadedImageCount=0;
OkHttpClient=新的OkHttpClient();
client.dispatcher().setMaxRequestsPerHost(50);
MediaType MEDIA_TYPE=MediaType.parse(“image/png”);
对于(int i=0;i0){
File sourceFile=新文件(Uri.parse(signatures.get(0.getImageURI()).toString());
字符串newJobID=signatures.get(0.getJobID().concat(“-signature”);
RequestBody RequestBody=新的MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(“image”,sourceFile.getName(),RequestBody.create(媒体类型,sourceFile))
.addFormDataPart(“名称”,newJobID)
.build();
Request Request=newrequest.Builder()
.url(“XXXXXXXXXX”)
.post(请求主体)
.build();
client.newCall(request).enqueue(new Callback()){
@凌驾
公共void onFailure(调用调用,IOE异常){
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
}
});
}
}
已上载的公共void onImageUpload(){
上传的ImageCount++;
如果(uploadedImageCount==images.size()){
runFinalRequest();
}
}
public void onImageUploadFailed(){
//处理失败的情况。您可以检测失败的映像并尝试重新发送
}