【发布时间】:2017-06-30 10:18:48
【问题描述】:
我有一个 Firebase 数据库,如下所示。我正在尝试检索此剧集数据,但总是出错
users:
{
Fcm_id: "c68y2j3bwis:APA91bFABxC6W5FmYVCOSmgJiB_-UEqnrmQ...",
Name: "Vikas Kumar",
episodes:{
0: "-Kno0IYdlSjjfFsXkGQ7",
1: "-Kno0IYdlSjjfFsXkGQ8"
},
gender:Male,
age:14,
email:"vikas@gmail.com",
}
这是我在其中创建 HashMap 的用户 POJO 类
public class User implements Serializable{
private String Name;
private String email;
private String gender;
private String Fcm_id;
private String id;
private int age;
private String image;
private ArrayList<Map<String,Object>> episodes;
public User()
{
}
public ArrayList<Map<String, Object>> getEpisodes() {
return episodes;
}
public void setEpisodes(ArrayList<Map<String, Object>> episodes) {
this.episodes = episodes;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getFcm_id() {
return Fcm_id;
}
public void setFcm_id(String Fcm_id) {
this.Fcm_id = Fcm_id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
ListPatients.java 类 我已经编写了代码来从数据库中检索数据
firebasePathMain.child("users").child(auth.getCurrentUser().getUid()).child("episodes").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String episodeId = dataSnapshot.getValue().toString();
Log.d(TAG,episodeId);
firebasePathMain.child("episodes").child(episodeId).child("Participants").child("User_id").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String UserId = dataSnapshot.getValue().toString();
Log.d(TAG,UserId);
firebasePathMain.child("users").child(UserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
user.setId(UserId);
Log.d(TAG,user.getName());
listPatient.add(user);
adapterPatients.notifyDataSetChanged();
// adapterPatients.refillAdapter(user);
// listUpdate.add(0, user.getId());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Listpatients.add(UserId);
Log.d(TAG,Listpatients.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但是当我试图检索数据时,这是这个错误
反序列化时需要一个 Map,但得到了一个类 java.util.ArrayList
【问题讨论】:
-
我有比下面给出的更简单的解决方案,只是在 Arraylist 中制作了地图
-
你可以参考我的这个答案。 stackoverflow.com/questions/55016979/… 几乎类似的问题。
标签: android firebase firebase-realtime-database firebase-authentication