【发布时间】:2020-04-04 06:27:06
【问题描述】:
我应该如何从 firebase 读取这些数据? 因为这是一个严重的问题,让我简单地解释一下这个问题。 因此,就像在下面的 json 图像中一样,我有一个需要检索的数据 max_slide,但由于下面的 Exception 而我不能。
com.google.firebase.database.DatabaseException:反序列化时需要一个列表,但得到一个类 java.util.HashMap
显示此异常是因为 JSON 中目前没有列表。但是当我在那里添加一些数据以制作列表时,它是 JSON 格式的。没有这样的例外。
只有一个数据存在时才会出现异常!
下面的代码,我用来检索数据。错在哪里?
lessonProgressList = new ArrayList<>();
mDatabaseReference = firebaseDatabase.getReference("/lesson");
mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.getValue() != null) {
for (DataSnapshot ds: dataSnapshot.getChildren()) {
Log.d(TAG, "DataSnapshot Loop");
Lesson lesson = ds.getValue(Lesson.class); // THIS LINE THROWING THE EXCEPTION
lessonProgressList.add(lesson);
}
listener.updateLessonsProgress(lessonProgressList);
Log.d(TAG, "DataSnapshot Success");
} else {
Log.d(TAG, "Failed!");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
});
Lesson.java 类
public class Lesson implements Serializable{
private List<Topic> topic;
public Lesson() {
}
public Lesson(List<Topic> topic) {
this.topic = topic;
}
public List<Topic> getTopic() {
return topic;
}
}
主题.java
public class Topic implements Serializable {
private int max_slide;
public Topic(int max_slide) { this.max_slide = max_slide; }
public Topic() { }
public int getMax_slide() {
return max_slide;
}
}
【问题讨论】:
-
你的
Lesson班级是什么样子的? -
请帮助我添加了 Lesson.java 类。
-
嗯...我没有立即看到问题。希望其他人发现它。
-
谢谢#Frank van。我通过在 Firebase DB 中插入一些初始值来解决这个问题。这样每当我检索它收到的值时,因为现在它有一个列表但有一些初始值。我想告诉你一些细节。请在我编辑后查看。
标签: java android json firebase firebase-realtime-database