OKHTTP3 создает исключение ConnectionShutdownException - PullRequest
0 голосов
/ 29 января 2019

Я использую okhttp3 для отправки изображения на сервер, таким образом:

final OkHttpClient cliente=new OkHttpClient();

    HttpUrl.Builder urlBuilder = HttpUrl.parse(getString(R.string.sendimageurl)).newBuilder();

    String url = urlBuilder.build().toString();
    Request request=new Request.Builder()
            .addHeader("imagebase64", toBASE64(bitmap))
            .addHeader("token", almacen.getToken())
            .url(url)
            .build();

(Да, params отправляются в заголовках, не вините меня, это путьсервис построен).

Он всегда входит в метод onFailure(), запускает ConnectionShutdownException:

okhttp3.internal.http2.ConnectionShutdownException
at okhttp3.internal.http2.Http2Connection.newStream(Http2Connection.java:248)
at okhttp3.internal.http2.Http2Connection.newStream(Http2Connection.java:231)
at okhttp3.internal.http2.Http2Codec.writeRequestHeaders(Http2Codec.java:117)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:50)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:200)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

Я не устанавливаю никакого перехватчика в моем вызове.

Что я могу сделать, чтобыотправить мое изображение?

Спасибо.

РЕДАКТИРОВАТЬ:

После предложения Кристофера я делаю:

final OkHttpClient cliente=new OkHttpClient();

    OkHttpClient client1 = cliente.newBuilder()
            .readTimeout(10000, TimeUnit.MILLISECONDS)
            .build();

    HttpUrl.Builder urlBuilder = HttpUrl.parse(getString(R.string.sendimageurl)).newBuilder();

    String url = urlBuilder.build().toString();
    Request request=new Request.Builder()
            .addHeader("imagebase64", toBASE64(bitmap))
            .addHeader("token", almacen.getToken())
            .url(url)
            .build();
    client1.newCall(request).enqueue(new Callback() {
       //stuff
     }

Но безрезультатно, то же исключение.

РЕДАКТИРОВАТЬ 2:

После ответа морского кота я понял, что это должен быть запрос POST.Изменено на:

final OkHttpClient cliente=new OkHttpClient();

    HttpUrl.Builder urlBuilder = HttpUrl.parse(getString(R.string.sendimageurl)).newBuilder();

    String url = urlBuilder.build().toString();
    RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("imagebase64", toBASE64(bitmap))
            .addFormDataPart("token", almacen.getToken())
            .build();

    Request request=new Request.Builder()
            .addHeader("imagebase64", toBASE64(bitmap))
            .addHeader("token", almacen.getToken())
            .url(url)
            .post(requestBody)
            .build();

(данные должны отправляться в заголовках, но сообщение требует addFormDataPart, поэтому я тоже добавил их туда), но исключение то же самое.

1 Ответ

0 голосов
/ 29 января 2019

Ваш запрос имеет тип get ().Это то, что вы хотите?

(мне не хватает репутации, чтобы комментировать)

...