gpt4 book ai didi

android - 整洁的架构 rxjava firebase 实现

转载 作者:行者123 更新时间:2023-11-29 19:09:31 25 4
gpt4 key购买 nike

我正在为我的项目使用 fernando cejas 的整洁的 android 样板代码,并且 在我的项目中实现 firebase 实时数据库,但是,当我调试我的代码时,我发现每次调用 onDataChange() 时我的发射器都是 DISPOSED(当我向我的 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());
}
});
}

最佳答案

如果你调用 onComplete() 你告诉 Observable 完成它工作。然后您正在订阅 - 您立即进入 observable complete。尝试删除它,我想你会得到你想要的结果。顺便说一句,尝试将列表平面映射到可迭代的 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)})
}

关于android - 整洁的架构 rxjava firebase 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45863306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com