java - 迭代 DataSnapshot 时出现 Firebase ClassCastException

标签 java firebase

我正在尝试向网站 they recomend to post a question here instead 中的 Firebase 团队报告错误.

我正在使用最新的 Java SDK 来监听节点更改事件。迭代 DataSnapshot 对象时出现以下异常

请注意,错误发生在库内部,而不是在我的代码中。

代码:

        void printData(DataSnapshot data) {
            System.out.println(data.getName() + ":" + data.getValue());
            Iterator<DataSnapshot> it = data.getChildren().iterator();
            while (it.hasNext()) {
                DataSnapshot dataSnapshot = (DataSnapshot) it.next();
                printData(dataSnapshot);
            }
        }

数据:

onChildAdded
-e42170ec-a44f-4dcf-9d18-76a39165cea7:{ts=1405260544422, rating=2}
--rating:2

异常堆栈跟踪:

Exception in thread "FirebaseEventTarget" java.lang.ClassCastException: com.firebase.client.snapshot.LongNode cannot be cast to com.firebase.client.snapshot.ChildrenNode
    at com.firebase.client.DataSnapshot.getChildren(DataSnapshot.java:273)
    at Read$1.printData(Read.java:54)
    at Read$1.onChildAdded(Read.java:39)
    at com.firebase.client.core.ChildListenerContainer$1.run(ChildListenerContainer.java:49)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

最佳答案

感谢您的报告!抱歉,看起来这确实是一个错误,它应该返回一个空迭代器而不是抛出异常。我将在客户端的下一个版本中修复该问题。关注 @FirebaseRelease有关客户端版本的通知。

同时,您可以通过在使用 hasChildren() 方法调用 getChildren() 之前首先检查 DataSnapshot 实例是否有子级来防止这种情况。所以你的 printData 方法可能看起来像这样:

    void printData(DataSnapshot data) {
        System.out.println(data.getName() + ":" + data.getValue());
        if (data.hasChildren()) {
            Iterator<DataSnapshot> it = data.getChildren().iterator();
            while (it.hasNext()) {
                DataSnapshot dataSnapshot = (DataSnapshot) it.next();
                printData(dataSnapshot);
            }
        }
    }

关于java - 迭代 DataSnapshot 时出现 Firebase ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723900/

相关文章:

Firebase 存储允许删除文件

javascript - 如何将 firebase firestore 与我本地的 firebase 模拟器套件连接?

java - 如何在 IntelliJ Idea 的项目树中立即看到编译错误?

java - 如何在 DefaultTableModel/JTable 中合并单元格?

java - `checkstyle-suppressions.xml` 的位置?

java - 如何测试netty内存泄漏

ios - 集成新的Firebase..错误cocoapods

javascript - 云函数 onUpdate 不起作用

java - 如何在 Gradle 构建脚本中更改 java 源目录

android - 如何在Firebase聊天应用程序中实现消息可见功能