当使用以下模式从 Firebase 实时数据库同步获取数据时:
String s = Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> e) throws Exception {
FirebaseDatabase.getInstance().getReference("path").orderByChild("child").equalTo("xyz").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
e.onSuccess("Got it");
}
@Override
public void onCancelled(DatabaseError databaseError) {
e.onError(databaseError.toException());
}
});
}
}).blockingGet();
它将挂起并产生 ANR 错误。如果我在 Single 之外使用相同的 Firebase“内部结构”,它就会正常运行。里面没有 Firebase 代码的 Single 也会触发,所以看起来两者之间有些不兼容。
有什么想法吗?
最佳答案
Firebase 在 ui 线程上传递事件,等待结果与 blockingGet
死锁。在我看来,您应该重新考虑应用程序逻辑并使用 subscribe(SingleObserver)
关于android - 使用 Android/Firebase 实时数据库时,Single.Create()...blockingGet() 在 RxJava 2.1.3 中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965683/