从Firebase数据库检索数据时出现Firebase数据库异常 [英] Firebase Database Exception while retrieving data from Firebase database

查看:95
本文介绍了从Firebase数据库检索数据时出现Firebase数据库异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆