[英]Getting Data from Firebase realtime database, Android Studio, Java
[英]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.