首页 > 解决方案 > 从 firebase 获取特定数据

问题描述

我想从我的数据库 firbase(“电话”孩子)中获取数据,您可以观看照片:

https://b.top4top.net/p_936hbh5o1.png

我正在使用此代码获取数据,但我有错误(java.lang.NullPointerException)。

 int i=0;
    DatabaseReference mDatabase;
// ...
    mDatabase = FirebaseDatabase.getInstance().getReference(); // instancie 
la BDD
    FirebaseUser currentFirebaseUser = 
FirebaseAuth.getInstance().getCurrentUser() ; // recup le yser courent

    String id= currentFirebaseUser.getUid(); // recup id user actrulle
    DatabaseReference usersRef = 
mDatabase.child("Users").child(id).child("favoris");


    usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int i=0;
            //ArrayList Userlist = new ArrayList<favoris>();
            // Result will be holded Here
            for (DataSnapshot dsp : dataSnapshot.getChildren()) {

                Map<String, Object> td = (HashMap<String,Object>) 
 dataSnapshot.getValue();
                ArrayList<Object> objectArrayList = new ArrayList<Object> 
 (td.values());

                //favoris fav = (favoris) td.values();
                favoris fav = (favoris) objectArrayList.get(0);

                names[i]= fav.name;
                i++;

            }

标签: androidfirebasefirebase-realtime-database

解决方案


创建一个 POJO 类,您可以在其中获取所需的元素,在这种情况下只是电话,您还可以获取地址和名称,只需在此处添加 setter 和 getter。

public class FavorisPojo {

    String phone;

    public FavorisPojo() {
    }


    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }



}

然后只需遍历所有节点并得到:

 usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int i=0;
            //ArrayList Userlist = new ArrayList<favoris>();
            // Result will be holded Here
            for (DataSnapshot dsp : dataSnapshot.getChildren()) {

              FavorisPojo favoris = dsp.getValue(FavorisPojo.class);
              String phone = favoris.getPhone();

            }

我们使用字符串来获取电话,因为它是在您的 Firebase 数据库中加载的,如果您想更改它,只需在您的 FavorisPojo 类中更改您的变量名称。

此外,您的参考资料还需要更深一层,如下所示:

 DatabaseReference usersRef = 
mDatabase.child("Users").child(id).child("favoris").child(the_id_containing_after_favoris);

推荐阅读