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