Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MaybeEmitter只工作一次,在订阅了一个观测者之后,我怎么能继续发送数据呢_Java_Android_Firebase Realtime Database_Rx Java2 - Fatal编程技术网

Java MaybeEmitter只工作一次,在订阅了一个观测者之后,我怎么能继续发送数据呢

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

我已经开始学习RxJava2,我想知道为什么 我使用的是一个MaybeEmitter对象,它总是在调用onSuccess方法后被释放。因此,当第二次调用e.onSuccess(Profile)时,来自Firebase(调用listener onDataChange)的Profile对象上的任何更改都不会传递给我的演示者,但不会发生任何事情**。是否有一种方法即使在调用onComplete或OnSuccess方法后仍能继续接收更新

我的演示者:

 @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观察家

  • 可观察的
发出0或n项,并以成功或错误事件终止

  • 单曲
发出单个项目或错误事件。方法调用的反应版本

  • 可能
成功,但有一项、无项或错误。选项的被动版本

  • 可完成的
要么以成功完成,要么以错误事件完成。它从不发射物品。可运行程序的被动版本


阅读关于RxJava的文章

你是对的,现在我可以调用onNext(Profile Profile),它可以工作了,我将阅读更多关于该理论的内容。谢谢