OkHTTPClient 挂在多部分请求上

OkHTTPClient hangs on Multipart request

我在 Android Lollipop 上 运行ning 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 请求中起作用的字符串值。

运行方法实现:

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 中,我可以看到有几个 'suspending all threads',这可能表明存在性能问题,尽管我正在使用非常小的图像 (~250kB) 进行测试。

知道是什么原因造成的吗?

我刚才解决了这个问题。为确保它不会无人问津:我增加了客户端的超时时间。我找不到修复它的代码。