OkHTTPClient挂起了Multipart请求

时间:2017-02-13 10:23:20

标签: android okhttp okhttp3

我在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)。

知道可能导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:0)

我刚才解决了这个问题。为了确保它没有得到答案:我增加了客户端的超时。我无法找到修复它的代码。