我正在使用fernando cejas'清理我的项目的android样板代码和 实现firebase实时数据库到我的项目,但是,当我调试我的代码时,我看到我的发射器是 DISPOSED 每次调用onDataChange()时(当我向我的firebase数据库添加一个新行时),我的UI不呈现新的列表内容,这里是我的数据模块代码,有什么建议吗?
@Override
public Observable<List> signalEntityList() {
Firebase myFirebaseRef = new Firebase("https://mydatabase.firebaseio.com/");
return Observable.create(emitter -> {
if (isThereInternetConnection()) {
myFirebaseRef.child("signal").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<SignalEntity> list = new ArrayList<>();
Iterable<DataSnapshot> snapshotIterable = snapshot.getChildren();
Iterator<DataSnapshot> iterator = snapshotIterable.iterator();
while (iterator.hasNext()) {
SignalEntity signalEntity = iterator.next().getValue(SignalEntity.class);
list.add(signalEntity);
}
emitter.onNext(list);
emitter.onComplete();
}
@Override
public void onCancelled(FirebaseError error) {
emitter.onError(new FirebaseException(error.getMessage()));
}
});
} else {
emitter.onError(new NetworkConnectionException());
}
});
}
答案 0 :(得分:1)
如果你打电话给onComplete(),你告诉Observable完成它的工作。然后你正在订阅 - 你立刻完成了可观察的完成。 尝试删除它,我想你会得到你想要的结果。 顺便说一句,尝试将列表映射到可迭代的Observable。
@Override
public Observable<SignalEntity> signalEntityList() {
Firebase myFirebaseRef = new Firebase("https://mydatabase.firebaseio.com/");
Observable<List<SignalEntity>> obs = Observable.create(emitter -> {
if (isThereInternetConnection()) {
myFirebaseRef.child("signal").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<SignalEntity> list = new ArrayList<>();
Iterable<DataSnapshot> snapshotIterable = snapshot.getChildren();
Iterator<DataSnapshot> iterator = snapshotIterable.iterator();
while (iterator.hasNext()) {
SignalEntity signalEntity = iterator.next().getValue(SignalEntity.class);
list.add(signalEntity);
}
emitter.onNext(list);
}
@Override
public void onCancelled(FirebaseError error) {
emitter.onError(new FirebaseException(error.getMessage()));
}
});
} else {
emitter.onError(new NetworkConnectionException());
}
});
return obs.flatMap(list -> {new Observable.from(list)})
}