I am using retrofit to hit my network api which returns json array. I am doing so using following code-
Observable<MyJson[]> response = (Observable<MyJson[]>)mNetworkService.getReadyObserverable(mNetworkService.getNetworkServiceApi().getMyDataJsons(), MyJson.class, true, useCache);
mAirlineSubscription = response.subscribe(new Observer<MyJson[]>() {
@Override
public void onCompleted() {
Log.d(TAG, "getData completed..");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getLocalizedMessage());
}
@Override
public void onNext(MyJson[] myJsonData) {
//I want here json data one by one
}
But my problem is json data array get downloaded completely and then only
onNext
gets called. Here I want onNext
should get called when retrofit downloads first json object from myData[]
json array and keep continue until my all json objects of myData[]
get downloaded. This way my UI would look more responsive and better in terms of user interaction.
Can anyone help to fix this?
Best Answer
Receiving elements One by One, as fast as possible?
Don't want to wait when everything will be downloaded?
The solution is: Declare the method of retrofit's interface with annotation
@Streaming
and useObservable<ResponseBody>
as return value. And then, by usingflatMap()
, convertResponseBody
to series of POJO (Observable<TYPE>
).Example:
Declare retrofit interface:
Use it like that:
Here is workable example:
https://github.com/allco/RetrofitAndRxJava
It takes 180+Mb Json and parses it as a real stream.