android - 使用 Android/Firebase 实时数据库时,Single.Create()...blockingGet() 在 RxJava 2.1.3 中挂起

标签 android firebase firebase-realtime-database rx-java rx-java2

当使用以下模式从 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/

相关文章:

javascript - 在 Vue.js 应用程序中初始化 firebase 3.4.0

android - Cordova - 使用 navigator.camera 选择要上传的文件

android - Android 代码中的 NullPointerException

android - 隐藏键盘时,Xamarin Forms 按回键不执行任何操作

android - 如何将 firebase firestore 用于我的桌面应用程序?

java - 如何获取 FirebaseListAdapter 中存在的元素计数?

android - 提交表单按钮在 WebView 上不起作用

javascript - FCM 消息负载错误,数据对象内的嵌套对象错误

android - 构建 APK 和签名 APK 中的 Settings.Secure.ANDROID_ID 不同,为什么?

java - Firebase DB 警告 : "Using an unspecified index. Consider adding ' ". indexOn"以获得更好的性能