我正在尝试在调用活动onDestroy
时执行一些操作。我想启动一个带有ID的Observable,然后从Realm检索一些数据,并根据检索到的数据对后端执行HTTP请求,然后将检索到的数据存储到以起始id给出的行。
要点:
图形:
代码: 我最终遇到并陷入困境
Observable.just(id)
.observeOn(Schedulers.io())
.map(new Function<String, Person>() {
@Override
public Person apply(@NonNull String id) throws Exception {
Realm realm = Realm.getDefaultInstance();
Person person = realm.copyFromRealm(realm.where(Person.class).equalTo("id", id).findFirst());
realm.close();
return person;
}
})
.switchMap(new Function<Person, Observable<Directions>>() {
@Override
public Observable<Directions> apply(@NonNull Person person) throws Exception {
return Utils.getRemoteService().getDirections(person.getAddress()); // retrofit
}
})
.map(new Function<Directions, Object>() {
@Override
public Object apply(@NonNull Directions directions) throws Exception {
// how do I get the id here to store the data to the correct person
return null;
}
})
.subscribe();
注意:
答案 0 :(得分:0)
信息必须在流中传递,它可以像下面这样完成。当你将它包装在一个类而不是Pair
时,它会更具可读性。
Observable.just(id)
.observeOn(Schedulers.io())
.map(new Function<String, Person>() {
@Override
public Person apply(@NonNull String id) throws Exception {
Realm realm = Realm.getDefaultInstance();
Person person = realm.copyFromRealm(realm.where(Person.class).equalTo("id", id).findFirst());
realm.close();
return person;
}
})
.switchMap(new Function<Person, Observable<Directions>>() {
@Override
public Observable<Directions> apply(@NonNull Pair<String, Person> pair) throws Exception {
// assuming that id is available by getId
return Pair(person.getId(), Utils.getRemoteService().getDirections(person.getAddress())); // retrofit
}
})
.map(new Function<Pair<String, Directions>, Object>() {
@Override
public Object apply(@NonNull Pair<String, Directions> pair) throws Exception {
// how do I get the id here to store the data to the correct person
// pair.first contains the id
// pair.second contains the Directions
return null;
}
})
.subscribe();