我已经定义并使用返回JSON的端点进行接口。 Retrofit将此JSON转换为MyObject。它也可以是一个列表,地图等,现在没关系。
这就是我订阅的方式。
subscription = Retrofit.create(MyApi.class)
.doSomething()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<MyObject>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MyObject myObject) {
}
});
我的问题是:
是否有可能不止一次调用onNext? 如果是,在哪个场合?
答案 0 :(得分:1)
在你的情况下,不可能,当然如果你不用doSomething()
方法发出更多的项目。
但是还有另一个非常常见的情况,例如,如果你使用Local first
方法并订阅hot
observable,每次数据库中的数据发生变化时都会发出新项目。
E.g。使用改造:
@Override
public Observable<List<FollowMeUser>> getFollowMeUsers() {
return realm.where(FollowMeUser.class)
.findAll()
.asObservable()
.filter(RealmResults::isLoaded);
}
getFollowMeUsers()
.subscribe(users -> {Timber.d("saved data has changed")}, Timber::e);
每次您插入/修改/删除FollowMeUser
集合时,都会通知getFollowMeUsers
的所有订阅者。
答案 1 :(得分:0)
如果您的改造返回数据/数据列表,则多次调用onNext。 但是,如果您的改造返回单个数据对象,则onNext将仅被调用一次。 例如:
//POJO
class User {
int userId;
String UserName;
}
//POJO
class UserData {
List<User> users;
}
interface RetrofitGithub {
@GET("...")
Observable<List<User>> getUsers();
@GET("...")
Observable<UserData> getUserData();
}
如果您订阅了getUsers()onNext将被多次调用N次。(N =列表的大小)
如果您订阅了getUserData()onNext,则只会调用一次。