使用Retrofit和RxJava从Android的JSON数组中一对一获取JSON对象 [英] Get JSON object one by one from JSON array in Android using Retrofit and RxJava
问题描述
我正在使用改型打我的网络api,该API返回json数组.我这样做是使用以下代码-
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
}
但是我的问题是要完全下载json数据数组,然后才下载
onNext
被调用.在这里我希望onNext
应该在改造从myData[]
json数组下载第一个json对象时调用,并保持继续,直到我下载所有myData[]
的json对象.这样一来,我的用户界面在用户交互方面将显得响应更快,更好.
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?
推荐答案
我也有相同的问题,请向我解释一下自己项目的基础,您应该使用 我的改装要求是
i have same question i explain it base of own project, you should use my retrofit request is
@GET("StudentApi/getAll")
Observable<List<Person>> getPersons();
并且我有一个接口来运行服务器请求,并且它具有用于运行getPersons()并返回人员信息的json数组列表的方法
and i have an interface to run server request and it has this method for run getPersons() and return list of json array of persons info
Observable<Person> getAllPersons();
,重要的部分是up方法的主体,应该像下面这样
@Override
public Observable<Person> getAllPersons() {
Observable<List<Person>> observable =
serviceGenerator.getService().getPersons();
return observable
.flatMap(new Function<List<Person>, Observable<Person>>() {
@Override
public Observable<Person> apply(List<Person> persons) throws Exception {
return Observable.fromIterable(persons);
}
});
}
我发现fromIterable方法一个接一个地返回json数组的对象 最后在一次活动中,我从诸如下面的方法中获取json对象
i found that fromIterable method return objects of json array one by one and finally in an activity i get json objects from up methods like bellow
public void getPersons(){
personsRepository.getAllPersons()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribeWith(new DisposableObserver<Person>() {
@Override
public void onNext(Person value) {
Log.e("person info is",value.getpName() + value.getpFamily());
}
@Override
public void onError(Throwable throwable) {
Log.e("onError",throwable.toString());
}
@Override
public void onComplete() {
Log.e("onComplete","onComplete");
}
});
}
我希望是有用的:)
这篇关于使用Retrofit和RxJava从Android的JSON数组中一对一获取JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!