gpt4 book ai didi

java - 使用 OkHTTP android 发送多个请求

转载 作者:行者123 更新时间:2023-11-30 10:19:46 27 4
gpt4 key购买 nike

我正在使用 OkHTTP 发送多张图片。由于所有请求都是异步的,因此在完成所有请求之前我无法运行最终调用。我如何在 OkHTTP 中实现这一点?

在发送完所有图像后,我需要运行 RunFinalRequest()。我尝试的是,我将 RunFinalRequest() 放在 OnResponse() 上,但有时即使有响应也无法通过。有更好的方法吗?

这是我的代码:

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();

最佳答案

您可以尝试以下机制:

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
}

关于java - 使用 OkHTTP android 发送多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48468253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com