我正在尝试向网站 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/