Last active
December 28, 2017 04:17
-
-
Save htdangkhoa/73a925d30a8b9fa0b6d11d8f1cc8bb3f to your computer and use it in GitHub Desktop.
[OkHttpClient] Mini client using OkHttp #Android #Java
This file contains 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 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); | |
} | |
} |
This file contains 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
/** | |
* 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