Last active
May 8, 2018 12:17
-
-
Save NikolaDespotoski/246812ae6fa15d089b0a to your computer and use it in GitHub Desktop.
OkHttpClient that does not execute Retrofit requests on HttpURLConnection but directly on OkHttpClient
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.squareup.okhttp.Headers; | |
import com.squareup.okhttp.MediaType; | |
import com.squareup.okhttp.OkHttpClient; | |
import com.squareup.okhttp.RequestBody; | |
import com.squareup.okhttp.Response; | |
import com.squareup.okhttp.ResponseBody; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.util.ArrayList; | |
import java.util.List; | |
import okio.BufferedSink; | |
import retrofit.client.Client; | |
import retrofit.client.Header; | |
import retrofit.mime.TypedInput; | |
import retrofit.mime.TypedOutput; | |
/** | |
* Created by nikola on 12/25/14. | |
*/ | |
public class OkHttpClient22 implements Client { | |
private static OkHttpClient sClient = new OkHttpClient(); | |
public OkHttpClient22(){}; | |
public OkHttpClient22(OkHttpClient okClient){ | |
sClient = okClient; | |
} | |
@Override | |
public retrofit.client.Response execute(retrofit.client.Request request) throws IOException { | |
com.squareup.okhttp.Request okRequest = buildRequest(request); | |
Response okResponse = sClient.newCall(okRequest).execute(); | |
retrofit.client.Response response = buildResponse(okResponse); | |
return response; | |
} | |
private retrofit.client.Response buildResponse(Response okResponse) { | |
TypedInput inputBody = new ResponseBodyWrapper(okResponse.body()); | |
retrofit.client.Response response = | |
new retrofit.client.Response(okResponse.request().urlString(), okResponse.code(), okResponse.message(), getHeaders(okResponse.headers()), inputBody); | |
return response; | |
} | |
private List<Header> getHeaders(Headers headers) { | |
List<Header> retrofitHeaders = new ArrayList<Header>(); | |
int headerCount = headers.names().size(); | |
for(int i = 0; i < headerCount; i++){ | |
retrofitHeaders.add(new Header(headers.name(i),headers.value(i))); | |
} | |
return retrofitHeaders; | |
} | |
private com.squareup.okhttp.Request buildRequest(retrofit.client.Request request) { | |
com.squareup.okhttp.Request.Builder requestBuilder = new com.squareup.okhttp.Request.Builder(); | |
//---copy headers--- | |
List<retrofit.client.Header> headers = request.getHeaders(); | |
Headers.Builder okHeadersBulder = new Headers.Builder(); | |
if(headers != null && headers.size() > 0) { | |
for (Header h : headers) { | |
okHeadersBulder.add(h.getName(), h.getValue()); | |
} | |
requestBuilder.headers(okHeadersBulder.build()); | |
} | |
//--- copy url ---- | |
requestBuilder.url(request.getUrl()); | |
//--- copy method and create request body--- | |
if(!request.getMethod().equalsIgnoreCase("GET")) | |
requestBuilder.method(request.getMethod(), new RequestBodyWrapper(request.getBody())); | |
else | |
requestBuilder.get(); | |
return requestBuilder.build(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RequestBodyWrapper extends RequestBody{ | |
private final TypedOutput mWrapped; | |
public RequestBodyWrapper(TypedOutput output){ | |
mWrapped = output; | |
} | |
@Override | |
public long contentLength() { | |
return mWrapped.length(); | |
} | |
@Override | |
public MediaType contentType() { | |
return MediaType.parse(mWrapped.mimeType()); | |
} | |
@Override | |
public void writeTo(BufferedSink sink) throws IOException { | |
mWrapped.writeTo(sink.outputStream()); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ResponseBodyWrapper implements TypedInput { | |
private ResponseBody mWrapped; | |
public ResponseBodyWrapper(ResponseBody body){ | |
mWrapped = body; | |
} | |
@Override | |
public String mimeType() { | |
return mWrapped.contentType().type(); | |
} | |
@Override | |
public long length() { | |
return mWrapped.contentLength(); | |
} | |
@Override | |
public InputStream in() throws IOException { | |
return mWrapped.byteStream(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nice.