Retrofit 2 : REST Client for Android
Using RxJava with Retrofit
Add the following dependencies in Module level build.gradle file:
dependencies {
/// ...
// Add Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
// Using gson as converter
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
// A Converter which supports converting strings and both primitives and their boxed types to text/plain bodies.
implementation 'com.squareup.retrofit2:converter-scalars:2.5.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 2.x.x version)
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.0'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
testImplementation 'androidx.test:runner:1.3.0-alpha02'
}
Create an interface called ApiInterface.java with the following lines:
interface ApiService {
@Headers("Content-Type: application/json")
@PUT("glucose-upload")
fun uploadGlucose(@Body str:String): Call<String>
@Headers("Content-Type: application/json")
@PUT("glucose-upload")
fun uploadGlucose2(@Body str:String): Observable<String>
}
In your Activity file(or wherever you want to make the API call), add the following lines:
Retrofit retrofit = new Retrofit.Builder()
.client(new OkHttpClient())
.baseUrl("https://baseurl")
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
ApiService service = retrofit.create(ApiService.class);String str = "{}"; // Sending empty JSON as Request body.
Observable<String> call = service.uploadGlucose2(str);
call.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe: " + d.isDisposed());
}
@Override
public void onNext(String s) {
// Main Data is produced here.
Log.d(TAG, "onNext: " + s);
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete: ");
}
});
You can now run the app and see the Log output from the Run tab as shown below:
In Postman the response looks like the following:
===================================
Suggested Reading:
https://inthecheesefactory.com/blog/retrofit-2.0/en
https://github.com/codepath/android_guides/wiki/Consuming-APIs-with-Retrofit
Comments
Post a Comment