我尝试使用Realm和RxJava实现模式Repository。存储库界面有这样的签名
Observable<List<T>> query(Specification specification);
因此,当我使用Realm并想要检索结果&#34; asObservable&#34;时,我得到Observable&gt;。我找不到改变Observable的方法&gt;进入Observable&gt;。
有人可以帮忙解决这个问题吗?
我试过这样的
final Observable<RealmResults<PlantRealm>> realmResults = realm.where(PlantRealm.class)
.equalTo(PlantTable.ID, "1")
.findAll().asObservable();
// convert Observable<RealmResults<PlantRealm>> into Observable<List<PlantRealm>>
return realmResults.flatMap(Observable::from).toList().map(list -> {
for (PlantRealm plantRealm : list) {
plants.add(toPlant.map(plantRealm));
}
return Observable.from(plants);
}
);
但是类型检查系统仍在抱怨......
return Observable.create( subscriber -> {
final Realm realm = Realm.getInstance(realmConfiguration);
final RealmResults<PlantRealm> realmResults = realm.where(PlantRealm.class)
.equalTo(PlantTable.ID, "1")
.findAll();
final List<Plant> plants = new ArrayList<>();
for (PlantRealm plantRealm : realmResults) {
plants.add(toPlant.map(plantRealm));
}
realm.close();
subscriber.onNext(plants);
subscriber.onCompleted();
});
答案 0 :(得分:2)
在观看Dan Lew关于常见的RxJava错误(mistake flattening list)的会议之后,我发现了与此案相关的常见错误。
因此,此案例的解决方案如下。
realmResults.flatMap(list ->
Observable.from(list)
.map(plantRealm -> toPlant.map(plantRealm))
.toList())
此视频非常棒,我强烈建议您观看。
如果我想从其他Thread访问realm对象,我遇到此解决方案的问题。我可以解决这样的其他角落案例,但我仍然坚持这一点。
我解决了这个......
答案 1 :(得分:0)
您可以执行以下操作:
public Observable<List<AllTypes>> getList() {
Observable<RealmResults<AllTypes>> obs = realm.where(AllTypes.class).findAll().asObservable();
return (Observable) obs;
}
答案 2 :(得分:0)
try:
pw_length_ask = int(raw_input("How long would you like your password to be? "))
final_pw_length = pw_length + int(pw_length_ask.strip())
print("Pass length set to " + str(final_pw_length))
except ValueError:
print("You must enter a number.")
int(raw_input("How long would you like your password to be? "))