如何从android studio上的firebase获取String?

时间:2017-05-05 07:32:44

标签: android firebase

我是使用firebase的新手,我不明白如何从我的数据库中获取单个字符串

我的数据库

enter image description here

我想写一个获取用户ID并返回其名字的函数。我尝试了很多东西,但没有成功。有人能给我这个功能还是告诉我怎么写它?

这就是我的尝试:

public void checkFunction() {

  final FirebaseDatabase database = FirebaseDatabase.getInstance();  
  DatabaseReference myRef = database.getReference("Users").child("0");  

  ValueEventListener UserFromID = new ValueEventListener() {  

    @Override  
    public void onDataChange(DataSnapshot dataSnapshot) {  
      return dataSnapshot.getValue().toString();  
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }

  };

  myRef.addValueEventListener(UserFromID);
}

但是我收到以下错误

  

无法从void结果类型为

的方法返回值

1 个答案:

答案 0 :(得分:0)

理想情况下,我们需要了解您正在尝试做的事情。

应用的用户是否可以访问所有这些用户ID?或者他们应该只访问自己的?他们是管理员还是最终用户等?

当您说“获取用户ID的函数”时,您是说您提供了ID,该函数是否返回该用户ID中的人的姓名?此外,在这种情况下,您要对 0 的用户ID进行硬编码。这仅仅是为了测试吗? 您是使用Firebase Auth进行用户注册等,还是没有注册?

如果不了解更多内容,很难回答这个问题,但我们假设用户最多可以从Firebase获取他们有权访问的任何字符串。 (如果使用Firebase Auth,则DatabaseReference略有不同)

因此,您需要一个映射到树中正确节点的DatabaseReference。在您的示例中,用户将无法访问用户1和2.(这是您想要的吗?)。在我的例子中,他们可以访问0,1和2。

现在,您只需向您要查找的数据库引用的子项添加一个侦听器。在下面的例子中,我们要求的是具有键“0”的值。

public void checkFunction() {

    private FirebaseDatabase mRef;
    //String variable to store whatever value we're looking for
    String mName = "";

    //Our reference knows only "Users" and all of its children
    mRef = FirebaseDatabase.getInstance().getReference().child("Users");  

    //Adding a listener for the value associated with the user key "0"
    mRef.child("0").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            //In this case, "shalom" will be stored in mName
            mName = (String) snapshot.getValue();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

希望这能让您更容易理解最新情况。

如果不了解更多信息,很难回答,但我怀疑你需要重新考虑数据库的结构。也许更符合下面结构的内容,其中 RandomUserIdsHere 是在使用Firebase Auth注册时分配给每个用户的自动生成的uid。

todofirebaseapp-4c83d{
               "Users" :{
                   "*RandomUserIdsHere*" : {
                         "FirstName" : "Joe",
                         "LastName" : "Bloggs",
                          "Age" : "30"
                     }
                   "*AnotherRandomUserIdsHere*" : {
                         "FirstName" : "Jane",
                         "LastName" : "Doe",
                          "Age" : "21"
                     }
                   "*AnotherRandomUserIdsHere*" : {
                         "FirstName" : "John",
                         "LastName" : "Doe",
                          "Age" : "47"
                     }
              }

}

在这种情况下,DatabaseReference看起来会有所不同。我们会像这样在uid中传递。

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid;
mRef = FirebaseDatabase.getInstance().getReference("todofirebaseapp-4c83d").child("Users").child(uid); 

编辑:纠正我无法拼写。