There’s something that probably you can’t avoid in an Android project: Networking. Requesting data from an API server or getting a single byte from the internet, you are doing networking.
No doubt there are a lot of good libraries out there and the wheel doesn’t need to be reinvented, but we can realign it based on our needs.
I recently published a library, which I believe to be the simplest way to handle networking with Android using Retrofit.
Retrofit is type-safe HTTP client for Android and Java by Square, Inc. It provides a powerful and flexible framework for authenticating and interacting with APIs. You can find basic details about Retrofit in my previous post.
This article talks about RetrofitHelper. It is an Open Source Android library that used to make HTTP request easily. Here are some advantages of using RetrofitHelper over other libraries:
- Network checking is not required.
- No need to handle ProgressDialog while calling an API.
- ApiInterface and ApiClinet are not required.
- You can handle errors in a single place.
- You can optimise your code.
- Avoid code redundancy.
For using this networking library, you need to follow the below instructions.
Step 1: You need to add the following dependency to your build.gradle file.
implementation 'com.droidmentor:helper:1.0.1' |
Step 2: Then add the required permission in your AndroidManifest
<!- Allows applications to open network sockets. -> | |
<uses-permission android:name="android.permission.INTERNET" /> | |
<!- Allows applications to access information about networks. -> | |
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
Step 3: At next set the Base URL and common headers using the following code
ApiClient.setBaseUrl("http://testapi.droidmentor.com/"); | |
Map<String, String> default_headers = new HashMap<>(); | |
default_headers.put("token", Url_handler.user_token); | |
ApiClient.setCommonHeaders(default_headers); |
This library checks the network connection by default and shows a Toast with “Network connection failure” message. You can change this message and also if you don’t want this toast message you can hide this too by using the below code.
ApiClient.setNetworkErrorMessage("Network Error"); | |
ApiClient.showNetworkErrorMessage(false); |
setting Base URL is mandatory and others are optional. You are required to do this only once.
Step 4: Then create an instance for APICall. APICall is the class which connects ApiListener and ApiInterface.
APICall networkCall; | |
networkCall = new APICall(this); |
If you want to set additional values in the header then you can use the following snippet,
APICall networkCall; | |
Map<String, String> custom_headers = new HashMap<>(); | |
default_headers.put("token", Url_handler.user_token); | |
networkCall = new APICall(this,true,custom_headers); |
You can create an instance based on your requirement, using the below set of constructor with the respective arguments.
// Standard Object | |
public APICall(Activity activity) { | |
init(activity, ApiClient.getCommonHeaders(), null); | |
} | |
// boolean flag decides the header is needed or not | |
public APICall(Activity activity, boolean with_header) { | |
if (with_header) | |
init(activity, ApiClient.getCommonHeaders(), null); | |
else | |
init(activity, null, null); | |
} | |
// you can add additional header | |
public APICall(Activity activity, boolean with_header, Map<String, String> customHeaders) { | |
if (with_header) | |
init(activity, ApiClient.getCommonHeaders(), customHeaders); | |
else | |
init(activity,null, customHeaders); | |
} | |
// set default header | |
public APICall(Activity activity, Map<String, String> defaultHeaders) { | |
init(activity, defaultHeaders, null); | |
} | |
// set default and additional header | |
public APICall(Activity activity, Map<String, String> defaultHeaders, Map<String, String> customHeaders) { | |
init(activity, defaultHeaders, customHeaders); | |
} |
Step 5: Then call APIRequest method with the needed parameters. Here only the magic happens, this is the method which simplifies your process and act wisely based on your parameters. This method can handle the following arguments.
- type : type of the request.
- url : endpoint
- responseModel : response model class.
- body : request body.
- params : URL parameters.
- from : int value represent the source, because in a single page you can trigger multiple requests.
- is_PDshow : boolean flag shows the visibility of the ProgressDialog.
- message : Loader title message.
- responseListener : It is an interface, it contains the callback methods (onSuccess, onFailure, onNetworkFailure).
In this arguments list : you must specify the values for type, url, responseModel and responseListener . You can send NULL value for body and params. If you want to show the progress dialog then set the title message else neglect it.
I made a simple sample app that makes API request using RetrofitHelper , it’s over on GitHub if you want to check it out.
View on GithubFeel free to comment and share, keep watching this space to get more updates on Android Stuff!
Jaison Fernando
Latest posts by Jaison Fernando (see all)
- Phone number auth using Firebase Authentication SDK - March 20, 2020
- Password-less email auth using Firebase Authentication SDK - March 9, 2020
- How to use SharedPreferences API in Android? - February 10, 2020