android studio无法从Firebase实时数据库中读取检索到的数据

时间:2019-04-08 11:58:40

标签: java android firebase-realtime-database

我正在尝试从Firebase读取数据,但是尽管我正在使用本教程,但android studio无法读取

我试图将android studio发送的链接复制到firebase:

DatabaseReference myRef = database.getReference(“ USERS”)。child(uID).child(“ DeviceID”); textview.setText(myRef.toString());

并在浏览器中显示结果,它向我显示了firebase中的结果,但是当我尝试使用它来获取数据时,它没有检索任何内容。 这是我试图通过调用函数来读取它的方法:

textview.setText(ReadDeviceId);

''''''''''''''''''''''''''''''

   private String ReadDeviceId(){

    FBUser = FirebaseAuth.getInstance().getCurrentUser();
    uID = FBUser.getUid();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("USERS").child(uID).child("DeviceID");

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            r_deviceID = dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            r_deviceID = "no userID";
        }
    });
    return r_deviceID;
}

''''''''''''''''''''''''''''''''''''''''' 知道我的Firebase数据库安全规则是: '''''''''''''''''''''''''''''

{

“规则”:{

“。write”:“ auth!= null”,

“。read”:是

}

}

'''''''''''''''''

但什么也没显示

2 个答案:

答案 0 :(得分:0)

您可以尝试此代码

 private String ReadDeviceId(){
      FBUser = FirebaseAuth.getInstance().getCurrentUser();
      uID = FBUser.getUid();
      FirebaseDatabase database = FirebaseDatabase.getInstance();
      DatabaseReference myRef = 
           database.getReference("USERS").child(uID).child("DeviceID");

     myRef.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
             for(Datasnapshot snapshot : dataSnapshot.getChildren)
             {
                //try to map it with your on model class and replace the String with your model class
                r_deviceID = snapshot.getValue(String.class)
             }
             //r_deviceID = dataSnapshot.getValue(String.class);
          }

          @Override
          public void onCancelled(DatabaseError error) {
        // Failed to read value
             r_deviceID = "no userID";
           }
     });
     return r_deviceID;
 }

答案 1 :(得分:0)

In your ReadDeviceId() function, you are returning the value of r_deviceID before it is set (event listeners are not synchronous). Therefore, your textview.setText(ReadDeviceId()); will always be textview.setText(null);, which will show nothing.

For your use case, you should change addValueEventListener to addListenerForSingleValueEvent and set the textview's value from within the handler itself like this:

private String ReadDeviceId(){
    FBUser = FirebaseAuth.getInstance().getCurrentUser();
    uID = FBUser.getUid();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("USERS").child(uID).child("DeviceID");

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                textview.setText(dataSnapshot.getValue(String.class));
        }

        @Override
        public void onCancelled(DatabaseError error) {
                // Failed to read value
                textview.setText("no userID");
        }
    });
}