繁体   English   中英

Android Studio 未从 Firebase 实时数据库读取检索到的数据

[英]Android Studio is not reading the retreived data from 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”:真

}

}

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

但没有显示任何内容

你可以试试这个代码

 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;
 }

在您的ReadDeviceId()函数中,您将在设置之前返回r_deviceID的值(事件侦听器不同步)。 因此,您的textview.setText(ReadDeviceId()); 将永远是textview.setText(null); ,这将不显示任何内容。

对于您的用例,您应该将addValueEventListener更改为addListenerForSingleValueEvent并从处理程序本身中设置 textview 的值,如下所示:

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");
        }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM