android - 无法从 datasnapshot 对象的 firebase 检索数据
问题描述
这是我的数据,我想通过使用 addValueEventListener 来检索它,但不幸的是我的应用程序停止了
@Override
public void onStart() {
super.onStart();
db.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List.clear();
for(DataSnapshot dSnapshot :dataSnapshot.getChildren()){
List<String> td = (ArrayList<String>) dataSnapshot.getValue();
// data data1=dSnapshot.getValue(data.class);
List.add(data1);
}
DataList adapter =new DataList(Fragment1.this.getActivity(),List);
list.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
由于这行代码,我的应用程序已停止,所以请告诉我任何替代方案。
//**data data1=dSnapshot.getValue(data.class);
List.add(data1);)
解决方案
假设您的db
变量指出了正确的参考。
而不是使用
ValueEventListener
和循环遍历每个孩子。使用ChildEventListener
并确保DatabaseReference
指向子节点所在的根目录,这样我们就可以遍历每个 POJO。
db.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
list.add(dataSnapshot.getValue(YourModel.class)); // Change with your POJO
// Add to your list
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(DatabaseError er) { }});
如果要在实时数据库中检索泛型,请使用 Firebase 的抽象类GenericTypeIndicator
GenericTypeIndicator<List<Message>> t = new GenericTypeIndicator<List<Message>>() {};
List<Message> messages = snapshot.getValue(t);
推荐阅读
- permissions - RingCentral Meetings API 错误 - “用户需要对请求的资源拥有 [会议] 权限”
- python - 正则表达式以捕获特定百分比/小数
- vba - 十进制输入值
- spring - 使用jar文件运行时的Spring Boot thymeleaferror
- jquery - 如何在单个 JQuery 函数中使用多个 -web-kit 过滤器?
- cordova - Ionic Cordova 占位符闪屏仍然出现
- javascript - Nuxt.js/Vue.js 可重用模态
- java - Kotlin FXML 文件控制器
- laravel - “雄辩的方式”:如果没有找到模型,则放弃 where 约束
- python-3.x - 使用 Selenium 和 python 打开页面上的所有加号按钮