【发布时间】:2021-09-16 16:53:21
【问题描述】:
假设我们使用 Firebase ChildEventListener,它可以作为多个数据源(它的函数),我用 Flowable 或 Observable 包装它。我希望在每个源中,发射器将数据发送到不同的管道,因为在每种情况下,数据都可以更改,我想以不同的方式处理它——也就是说,根据类型将发射分成几个不同的流事件。
如何在 Java 中做到这一点?
public void newUsers() {
DatabaseReference ref = database.getReference().child("Users");
Flowable.create(emitter -> {
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
User userData = dataSnapshot.getValue(User.class);
emitter.onNext(userData);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
User userData = dataSnapshot.getValue(User.class);
emitter.onNext(userData);
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
User userData = dataSnapshot.getValue(User.class);
emitter.onNext(userData);
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
emitter.onNext(userData);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
User userData = dataSnapshot.getValue(User.class);
emitter.onNext(userData);
}
});
}
}
【问题讨论】:
-
你不会使用不同的发射器来拥有多个流吗?
-
我很乐意这样做,但我不知道是否可以将 ChildEventListener 的功能分开,以便 Flowable 将所有功能包装在一起。你知道怎么做吗? @鲨鱼
-
是的,当然。让我重构这件事……不知道这是否是正确的方法,但这是我首先尝试的,而不是单个可流动的。
-
发布了一些东西,考虑一下@nirkov