我在Android Lollipop上运行OkHTTP3,我有以下静态方法在多部分表单请求中上传图像:
public static void uploadImage(Context context, String imageTitle, Uri imageUri, CallbackReceiver callbackReceiver) {
ContentResolver contentResolver = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(contentResolver.getType(imageUri));
String filePath = imageUri.toString();
String fileName = imageUri.getLastPathSegment();
File file = new File(filePath);
MediaType mediaType = MediaType.parse(type);
RequestBody rb = RequestBody.create(mediaType, file);
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image", fileName, rb)
.build();
Request request = new Request.Builder()
.url(RequestConstants.POST_IMAGE)
.addHeader(
RequestConstants.HTTP_HEADER_AUTHORIZATION,
RequestConstants.HTTP_AUTHORIZATION_PREFIX +
AccessToken.get())
.addHeader(
RequestConstants.HTTP_HEADER_ACCEPT,
RequestConstants.HTTP_APPLICATION_JSON)
.post(requestBody)
.build();
run(request, callbackReceiver);
RequestConstants是在其他GET和POST请求中起作用的字符串值。
run方法实现:
private static OkHttpClient client = new OkHttpClient();
private static void run(Request request, final CallbackReceiver callbackReceiver) {
try {
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
callbackReceiver.onSuccess(response);
}
@Override
public void onFailure(Call call, IOException e) {
callbackReceiver.onFailure(e);
}
});
} catch (Exception e) {
Log.e("OkHttpClient", e.getMessage());
}
}
每当我运行请求时,我都没有收到答案 - onSuccess和onFailure回调都没有执行。
在Logcat中,我可以看到有几个“暂停所有线程”,这可能表明存在性能问题,尽管我正在测试一个非常小的图像(~250kB)。
知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
我刚才解决了这个问题。为了确保它没有得到答案:我增加了客户端的超时。我无法找到修复它的代码。