android - 如何使用 DataSnapshot 为 Firebase 中的所有数据创建一个 ArrayList?
问题描述
我的问题是我在 Firebase 中有一个存储“Day”对象的数据库,我想检索数据库的所有内容并将所有内容放入 Days 的 ArrayList 但是当我执行代码时,我有一个错误:“无法将 java.lang.String 类型的对象转换为 com.example.android_project_test.Day 类型”,我不知道如何解决它。
我尝试投射它,但它没有用。
消息是:
2019-04-20 17:52:18.158 12477-12477/com.example.android_project_test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android_project_test, PID: 12477
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.android_project_test.Day
at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source:209)
at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source:0)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
at com.example.android_project_test.CalendarDbHelper.fetchData(CalendarDbHelper.java:125)
at com.example.android_project_test.CalendarDbHelper.access$000(CalendarDbHelper.java:12)
at com.example.android_project_test.CalendarDbHelper$1.onChildAdded(CalendarDbHelper.java:58)
at com.google.android.gms.internal.firebase_database.zzbt.zza(Unknown Source:71)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
这是我的日间课程:
public class Day {
private String id;
private String dayName;
private String dayDate;
private ArrayList<Meal> meals;
Day(){}
Day(String id, String dayName, String dayDate, ArrayList<Meal> meals) {
this.id = id;
this.dayName = dayName;
this.dayDate = dayDate;
this.meals = meals;
}
Day(String dayName, String dayDate, ArrayList<Meal> meals) {
this.dayName = dayName;
this.dayDate = dayDate;
this.meals = meals;
}
Day(String dayName, String dayDate) {
this.dayName = dayName;
this.dayDate = dayDate;
}
这是我将 Days 添加到数据库中的方法:
public void addDay(Day day)
{
String Id = db.push().getKey();
day.setId(Id);
db.child(Id).setValue(day);
}
这是我用来从数据库中检索 ArrayList 的方法:
public ArrayList<Day> listDays()
{
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return listDays;
}
这是我遇到问题的 fetchData(dataSnapshot) :
private void fetchData(DataSnapshot dataSnapshot)
{
for(DataSnapshot postSnapShot:dataSnapshot.getChildren())
{
Day day= postSnapShot.getValue(Day.class);
listDays.add(day);
}
}
当我想做“Day day = postSnapShot.getValue(Day.class);”时,我想做的是将每个孩子检索为 Day 对象。但我得到的是我上面写的信息。
解决方案
你已经设置了一个 childEventListener。与 valueEventListener 不同。你得到一个孩子一个孩子的数据。
推荐阅读
- ios - iOS 在空闲超过 30 秒后快速发送消息
- rocksdb - 在rocksdb中按值排序
- python - 获取python中两个列表中所有元素的总和
- python - 如何在没有 for 循环的情况下将 3D 图像矩阵转换为 2d 矩阵?Python 和 numpy
- flutter - 未定义flutter中的InteractiveViewer类
- django - django rest auth注册中password2如何为空
- python - Python Requests 403 错误在一个环境而不是另一个环境中?
- php - CakePhp 如何在 cakephp3 中以创建形式加载多个上下文
- discord.js - 如何让它为使用指定表情符号对消息做出反应的人添加角色
- javascript - scrollIntoView 不适用于我的反应组件