Java MaybeEmitter只工作一次,在订阅了一个观测者之后,我怎么能继续发送数据呢
我已经开始学习RxJava2,我想知道为什么 我使用的是一个MaybeEmitter对象,它总是在调用onSuccess方法后被释放。因此,当第二次调用e.onSuccess(Profile)时,来自Firebase(调用listener onDataChange)的Profile对象上的任何更改都不会传递给我的演示者,但不会发生任何事情**。是否有一种方法即使在调用onComplete或OnSuccess方法后仍能继续接收更新 我的演示者:Java MaybeEmitter只工作一次,在订阅了一个观测者之后,我怎么能继续发送数据呢,java,android,firebase-realtime-database,rx-java2,Java,Android,Firebase Realtime Database,Rx Java2,我已经开始学习RxJava2,我想知道为什么 我使用的是一个MaybeEmitter对象,它总是在调用onSuccess方法后被释放。因此,当第二次调用e.onSuccess(Profile)时,来自Firebase(调用listener onDataChange)的Profile对象上的任何更改都不会传递给我的演示者,但不会发生任何事情**。是否有一种方法即使在调用onComplete或OnSuccess方法后仍能继续接收更新 我的演示者: @Override public void lo
@Override
public void loadUserProfileData(String userUid) {
getCompositeDisposable().add(
getDatabaseSource().getProfile(userUid)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribeWith(new DisposableMaybeObserver<Profile>() {
@Override
public void onComplete() {
getView().goToLoginActivity();
}
@Override
public void onSuccess(Profile profile) {
getView().setUpProfileFields(profile);
}
@Override
public void onError(Throwable e) {
getView().showMessage(e.getLocalizedMessage());
}
})
);
}
@覆盖
public void loadUserProfileData(字符串userUid){
getCompositeDisposable().add(
getDatabaseSource().getProfile(userUid)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribeWith(新的可处置资产可能是观察员){
@凌驾
未完成的公共空间(){
getView().goToLoginActivity();
}
@凌驾
成功时的公共无效(配置文件){
getView().setUpProfileFields(配置文件);
}
@凌驾
公共无效申报人(可丢弃的e){
getView().showMessage(如getLocalizedMessage());
}
})
);
}
我的FirebaseDatabaseService:
@Override
public Maybe<Profile> getProfile(final String uid) {
return Maybe.create(
new MaybeOnSubscribe<Profile>() {
@Override
public void subscribe(final MaybeEmitter<Profile> e) throws Exception {
final DatabaseReference dataBaseProfile =
FirebaseDatabase.getInstance().getReference(USER_PROFILE).child(uid);
dataBaseProfile.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
Profile profile = null;
// There's always only one Profile object associated to each user
for(DataSnapshot dataSnapshot: snapshot.getChildren()){
profile = dataSnapshot.getValue(Profile.class);
}
e.onSuccess(profile);
} else {
e.onComplete();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("FIREBASE", databaseError.toString());
e.onError(databaseError.toException());
}
});
}
}
);
}
@覆盖
公共配置文件(最终字符串uid){
可能返回。创建(
新的MaybeOnSubscribe(){
@凌驾
public void subscribe(最终Maybeimitter e)引发异常{
最终数据库参考数据库配置文件=
FirebaseDatabase.getInstance().getReference(用户配置文件).child(uid);
dataBaseProfile.addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
if(snapshot.exists()){
Profile=null;
//始终只有一个配置文件对象与每个用户关联
对于(DataSnapshot DataSnapshot:snapshot.getChildren()){
profile=dataSnapshot.getValue(profile.class);
}
e、 onSuccess(profile);
}否则{
e、 onComplete();
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.d(“FIREBASE”,databaseError.toString());
e、 OneError(databaseError.toException());
}
});
}
}
);
}
因为您正在使用可能
使用可观察
下面是不同的RXjava2观察家
- 可观察的
- 单曲
- 可能
- 可完成的
阅读关于RxJava的文章你是对的,现在我可以调用onNext(Profile Profile),它可以工作了,我将阅读更多关于该理论的内容。谢谢