From 096b648a9d141c6517cce897d96a73b67cc6b94f Mon Sep 17 00:00:00 2001 From: semicolon Date: Sat, 3 Mar 2018 17:51:12 +0530 Subject: [PATCH] updated Volley 1.1.0 and OkHttp3Stack to Migrating-from-Apache-HTTP https://github.com/google/volley/wiki/Migrating-from-Apache-HTTP (Apache HTTP Client Removal from Android 6.0 Changes) (Optional interceptors support also commented in OkHttp3Stack) --- .../okhttpvolleygson/data/OkHttp3Stack.java | 112 +++++++----------- build.gradle | 2 +- 2 files changed, 47 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/sotti/okhttpvolleygson/data/OkHttp3Stack.java b/app/src/main/java/com/sotti/okhttpvolleygson/data/OkHttp3Stack.java index 89bdc40..c0352ca 100644 --- a/app/src/main/java/com/sotti/okhttpvolleygson/data/OkHttp3Stack.java +++ b/app/src/main/java/com/sotti/okhttpvolleygson/data/OkHttp3Stack.java @@ -1,69 +1,56 @@ package com.sotti.okhttpvolleygson.data; + import com.android.volley.AuthFailureError; import com.android.volley.Request; -import com.android.volley.toolbox.HttpStack; + import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; + import okhttp3.Call; import okhttp3.Headers; +//import okhttp3.Interceptor; import okhttp3.MediaType; import okhttp3.OkHttpClient; -import okhttp3.Protocol; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.ResponseBody; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.ProtocolVersion; -import org.apache.http.StatusLine; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.BasicHttpResponse; -import org.apache.http.message.BasicStatusLine; - -/** - * OkHttp backed {@link com.android.volley.toolbox.HttpStack HttpStack} that does not - * use okhttp-urlconnection - */ -public class OkHttp3Stack implements HttpStack { - - public OkHttp3Stack() { - } - private static HttpEntity entityFromOkHttpResponse(Response r) { - BasicHttpEntity entity = new BasicHttpEntity(); - ResponseBody body = r.body(); - entity.setContent(body.byteStream()); - entity.setContentLength(body.contentLength()); - entity.setContentEncoding(r.header("Content-Encoding")); +import com.android.volley.Header; +import com.android.volley.toolbox.BaseHttpStack; +import com.android.volley.toolbox.HttpResponse; + +public class OkHttp3Stack extends BaseHttpStack { + // private final List mInterceptors; + +// public okHttp3Stack(List interceptors) { +// this.mInterceptors = interceptors; +// } + + public OkHttp3Stack() { - if (body.contentType() != null) { - entity.setContentType(body.contentType().type()); - } - return entity; } - @SuppressWarnings("deprecation") - private static void setConnectionParametersForRequest(okhttp3.Request.Builder builder, - com.android.volley.Request request) - throws AuthFailureError { + private static void setConnectionParametersForRequest(okhttp3.Request.Builder builder, Request request) + throws AuthFailureError { switch (request.getMethod()) { case Request.Method.DEPRECATED_GET_OR_POST: // Ensure backwards compatibility. Volley assumes a request with a null body is a GET. - byte[] postBody = request.getPostBody(); + byte[] postBody = request.getBody(); if (postBody != null) { - builder.post(RequestBody - .create(MediaType.parse(request.getPostBodyContentType()), postBody)); + builder.post(RequestBody.create(MediaType.parse(request.getBodyContentType()), postBody)); } break; case Request.Method.GET: builder.get(); break; case Request.Method.DELETE: - builder.delete(); + builder.delete(createRequestBody(request)); break; case Request.Method.POST: builder.post(createRequestBody(request)); @@ -88,35 +75,16 @@ private static void setConnectionParametersForRequest(okhttp3.Request.Builder bu } } - private static ProtocolVersion parseProtocol(final Protocol p) { - switch (p) { - case HTTP_1_0: - return new ProtocolVersion("HTTP", 1, 0); - case HTTP_1_1: - return new ProtocolVersion("HTTP", 1, 1); - case SPDY_3: - return new ProtocolVersion("SPDY", 3, 1); - case HTTP_2: - return new ProtocolVersion("HTTP", 2, 0); - } - - throw new IllegalAccessError("Unkwown protocol"); - } - private static RequestBody createRequestBody(Request r) throws AuthFailureError { final byte[] body = r.getBody(); if (body == null) { return null; } - return RequestBody.create(MediaType.parse(r.getBodyContentType()), body); } @Override - public HttpResponse performRequest(com.android.volley.Request request, - Map additionalHeaders) - throws IOException, AuthFailureError { - + public HttpResponse executeRequest(Request request, Map additionalHeaders) throws IOException, AuthFailureError { OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); int timeoutMs = request.getTimeoutMs(); @@ -137,24 +105,36 @@ public HttpResponse performRequest(com.android.volley.Request request, setConnectionParametersForRequest(okHttpRequestBuilder, request); + +// for (Interceptor interceptor : mInterceptors) { +// clientBuilder.addNetworkInterceptor(interceptor); +// } + OkHttpClient client = clientBuilder.build(); okhttp3.Request okHttpRequest = okHttpRequestBuilder.build(); Call okHttpCall = client.newCall(okHttpRequest); Response okHttpResponse = okHttpCall.execute(); - StatusLine responseStatus = new BasicStatusLine(parseProtocol(okHttpResponse.protocol()), - okHttpResponse.code(), okHttpResponse.message()); - BasicHttpResponse response = new BasicHttpResponse(responseStatus); - response.setEntity(entityFromOkHttpResponse(okHttpResponse)); - Headers responseHeaders = okHttpResponse.headers(); + int code = okHttpResponse.code(); + ResponseBody body = okHttpResponse.body(); + InputStream content = body == null ? null : body.byteStream(); + int contentLength = body == null ? 0 : (int) body.contentLength(); + List
responseHeaders = mapHeaders(okHttpResponse.headers()); + return new HttpResponse(code, responseHeaders, contentLength, content); + } + + private List
mapHeaders(Headers responseHeaders) { + List
headers = new ArrayList<>(); for (int i = 0, len = responseHeaders.size(); i < len; i++) { final String name = responseHeaders.name(i), value = responseHeaders.value(i); if (name != null) { - response.addHeader(new BasicHeader(name, value)); + headers.add(new Header(name, value)); } } - - return response; + return headers; } -} \ No newline at end of file +} + + + diff --git a/build.gradle b/build.gradle index e2a235b..7171dfa 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ ext { targetSdkVersion = 27 compileSdkVersion = 27 gsonVersion = "2.8.2" - volleyVersion = "1.0.0" + volleyVersion = "1.1.0" okHttpVersion = "3.9.1" supportLibraryVersion = "27.0.2" circleImageViewVersion = "2.2.0"