从Firebase数据库检索数据时出现Firebase数据库异常 [英] Firebase Database Exception while retrieving data from Firebase database
问题描述
我有一个Firebase数据库,如下所示.我正在尝试检索此剧集数据,但总是出现错误
I have a Firebase Database as shown below. I am trying to retrieve this episode data but always getting error
users:
{
Fcm_id: "c68y2j3bwis:APA91bFABxC6W5FmYVCOSmgJiB_-UEqnrmQ...",
Name: "Vikas Kumar",
episodes:{
0: "-Kno0IYdlSjjfFsXkGQ7",
1: "-Kno0IYdlSjjfFsXkGQ8"
},
gender:Male,
age:14,
email:"vikas@gmail.com",
}
这是我在其中创建HashMap的用户POJO类
this is the user POJO class in which I am creating a HashMap
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类 我在其中编写了从数据库检索数据的代码
ListPatients.java Class where I have written code to retrieve the data from the database
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) {
}
});
但是当我尝试检索数据时,会出现此错误
but when I trying to retrieve the data it is this error
反序列化时预期Map,但是得到了一个类java.util.ArrayList
Expected a Map while deserializing, but got a class java.util.ArrayList
推荐答案
您需要使用Map<String, Object>
,而不是HashMap<Integer, String>
.
请使用以下代码:
private Map<String, Object> episodes;
public HashMap<String, Object> getEpisodes() {
return episodes;
}
public void setEpisodes(HashMap<String, Object> episodes) {
this.episodes = episodes;
}
要查询数据库,请使用以下代码:
To query your database please use this code:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference episodesRef = rootRef..child("users").child(auth.getCurrentUser().getUid()).child("episodes");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String key = ds.getKey();
String value = ds.getValue(String.class)
Log.d("TAG", "key= " + key + " -> value: " + value);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
episodesRef.addListenerForSingleValueEvent(eventListener);
输出将是:
key: 0 -> value: -Kno0IYdlSjjfFsXkGQ7
key: 1 -> value: -Kno0IYdlSjjfFsXkGQ8
肯定会起作用.
这篇关于从Firebase数据库检索数据时出现Firebase数据库异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!