Skip to content

Instantly share code, notes, and snippets.

@htdangkhoa
Last active December 28, 2017 04:17
Show Gist options
  • Save htdangkhoa/73a925d30a8b9fa0b6d11d8f1cc8bb3f to your computer and use it in GitHub Desktop.
Save htdangkhoa/73a925d30a8b9fa0b6d11d8f1cc8bb3f to your computer and use it in GitHub Desktop.
[OkHttpClient] Mini client using OkHttp #Android #Java
public class ClientHttp {
static String BASE_HOST = "https://8days.localtunnel.me";
private OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
private Request.Builder requestBuilder = new Request.Builder();
private HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
private HttpUrl.Builder urlBuilder;
private Request request;
private OkHttpClient client;
private void throwError(String message) {
throw new RuntimeException(message);
}
private Request.Builder createRequest() {
if (urlBuilder == null) throwError("HttpUrl.Builder is null, please run setRoute function.");
String url = urlBuilder.build().toString();
return requestBuilder.url(url);
}
private OkHttpClient createClient() {
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client = clientBuilder
.addInterceptor(loggingInterceptor)
.build();
return client;
}
public ClientHttp setUrl(@NonNull String url, boolean isHttps) {
url = url.replaceAll("http://", "")
.replaceAll("https://", "");
if (isHttps) {
url = "https://" + url;
} else {
url = "http://" + url;
}
urlBuilder = HttpUrl.parse(url).newBuilder();
return this;
}
public ClientHttp setRoute(@Nullable String route) {
urlBuilder = HttpUrl.parse(BASE_HOST + route).newBuilder();
return this;
}
public ClientHttp setConnectTimeout(long time) {
clientBuilder.connectTimeout(time, TimeUnit.SECONDS);
return this;
}
public ClientHttp setWriteTimeout(long time) {
clientBuilder.connectTimeout(time, TimeUnit.SECONDS);
return this;
}
public ClientHttp setReadTimeout(long time) {
clientBuilder.connectTimeout(time, TimeUnit.SECONDS);
return this;
}
public ClientHttp addHeader(@NonNull final String key, @NonNull final String value) {
requestBuilder.addHeader(key, value);
return this;
}
public ClientHttp addQueryParameter(@NonNull String name, @NonNull String value) {
urlBuilder.addQueryParameter(name, value);
return this;
}
public void GET(@NonNull Callback callback) {
createClient();
request = createRequest().get().build();
client.newCall(request).enqueue(callback);
}
public void HEAD(@NonNull Callback callback) {
createClient();
request = createRequest().head().build();
client.newCall(request).enqueue(callback);
}
public void POST(@Nullable RequestBody requestBody, @NonNull Callback callback) {
createClient();
if (requestBody == null) {
requestBody = RequestBody.create(null, new byte[0]);
}
request = createRequest().post(requestBody).build();
client.newCall(request).enqueue(callback);
}
public void PUT(@Nullable RequestBody requestBody, @NonNull Callback callback) {
createClient();
if (requestBody == null) {
requestBody = RequestBody.create(null, new byte[0]);
}
request = createRequest().put(requestBody).build();
client.newCall(request).enqueue(callback);
}
public void PATCH(@Nullable RequestBody requestBody, @NonNull Callback callback) {
createClient();
if (requestBody == null) {
requestBody = RequestBody.create(null, new byte[0]);
}
request = createRequest().patch(requestBody).build();
client.newCall(request).enqueue(callback);
}
public void DELETE(@Nullable RequestBody requestBody, @NonNull Callback callback) {
createClient();
if (requestBody == null) {
requestBody = RequestBody.create(null, new byte[0]);
}
request = createRequest().delete(requestBody).build();
client.newCall(request).enqueue(callback);
}
}
/**
* GET & HEAD method.
*/
new Client().setRoute("/hello")
.addQueryParameter("message", "Hello world!!!")
.GET(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String myResponse = response.body().string();
Log.i("RES", myResponse);
}
});
/**
* POST, PUT, PATCH & DELETE method.
* You can find more infomation about add request body: `https://howtoprogram.xyz/2017/01/14/how-to-post-with-okhttp/`
*/
FormBody.Builder builder = new FormBody.Builder();
builder.add("name", "Dang Khoa");
builder.add("age", String.valueOf(21));
RequestBody body = builder.build();
new Client().setRoute("/profile")
.setConnectTimeout(30)
.setWriteTimeout(30)
.setReadTimeout(30)
.POST(body, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
call.cancel();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i("RES", response.body().string());
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment