我正在尝试从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”:是
}
}
'''''''''''''''''
但什么也没显示
答案 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");
}
});
}