【问题标题】:Getting Data from Firebase realtime database, Android Studio, Java从 Firebase 实时数据库、Android Studio、Java 获取数据
【发布时间】:2019-01-18 19:54:27
【问题描述】:

我正在寻找一种从 firebase 实时数据库中以数组 [] 或字符串等格式获取数据的方法。

我的数据库如下所示: Link to image of database

或者: Database | -->Users | -->UID1 -->UID2

这是数据库的根目录 我想获取“用户”子项中所有 UID 的列表。 这是我到目前为止的代码,有点卡住了:

DatabaseReference databaseReference = firebaseDatabase.getReference("Users");
        databaseReference.addValueEventListener(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        String UIDs = dataSnapshot.getValue(String.class);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

在 java、android studio 和 firebase 方面,我还是个新手。我正在尝试以我知道如何使用的格式获取数据,例如字符串或字符串的数组 []。如果其他人可能问过同样的问题,我环顾四周,但我可以得到这些问题的答案来工作/不理解它们。 提前感谢您的宝贵时间!

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    要获取uid列表,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = rootRef.child("Users");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> list = new ArrayList<>();
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String uid = ds.getKey();
                list.add(uid);
            }
    
            //Do what you need to do with your list
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
        }
    };
    usersRef.addListenerForSingleValueEvent(valueEventListener);
    

    我建议您仅在回调中使用列表,否则它将为空。如果你想在onDataChange() 方法之外使用它,我建议你从这个post 中查看我的anwser 的最后一部分,我在其中解释了如何使用自定义回调来完成它。您也可以看看这个 video 以获得更好的理解。

    【讨论】:

      【解决方案2】:

      对于您的上述问题,我将提供两种方法:ArrayList 或带分隔符的字符串

      ArrayList<String> uids = new ArrayList<String>();
      
      FirebaseDatabase.getInstance().getReference("Users").addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
          if (dataSnapshot.exists()) {
              for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
                  uids.add(snapshot.getKey());
              }
          }
      }
      
      @Override
      public void onCancelled(DatabaseError error) {
      
      }
      });
      

      对于字符串

      字符串 uids = "";

      FirebaseDatabase.getInstance().getReference("Users").addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
              if (dataSnapshot.exists()) {
                  for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
                      uids += snapshot.getKey() + ",";
                  }
              }
          }
      
          @Override
          public void onCancelled(DatabaseError error) {
      
          }
          });
      

      这给出了一个输出,例如:uid1,uid2,uid3,.....uidn,

      【讨论】:

        【解决方案3】:

        你可以试试这个:

        DatabaseReference ref= 
        FirebaseDatabase.getInstance().getReference("Users");
        ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                int i = 0;
                for(DataSnapshot d : dataSnapshot.getChildren()) {
                    name[i] = d.getKey();
                    i++;
                }
            }
        }//onDataChange
        
        @Override
        public void onCancelled(DatabaseError error) {
        
        }//onCancelled
        });
        

        name[] 是一个字符串数组!

        【讨论】:

        • 如果你想客观的话,下次试试看谁先回答,谁抄了答案……
        猜你喜欢
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 2019-01-17
        • 1970-01-01
        • 2021-03-04
        • 2020-02-27
        相关资源
        最近更新 更多