【发布时间】:2018-04-11 05:41:42
【问题描述】:
我正在为我的 Android 应用程序使用 Firebase,我想读取数据。特别是我想选择一个具有特定 ID 的用户。当我使用调试器时,代码似乎没有执行 onDataChange() 指令。
private User readUserById(){
final User u = new User("","","");
Query query = mDatabaseReferences.child("users").orderByChild("id").equalTo(id);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
u.setId(ds.child("id").getValue(User.class).getId());
u.setNumber((ds.child("number").getValue(User.class).getNumber()));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return u;
}
private void initFirebase() {
FirebaseApp.initializeApp(this);
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReferences = mFirebaseDatabase.getReference();
}
public void sendCode(View v){
id= id.getText().toString();
readUserById();
phoneNumber = phoneText.getText().toString();
if (phoneNumber.equals("") || id.equals("")) {
Toast t = Toast.makeText(this, "Please insert a nickname and a valid phone number", Toast.LENGTH_LONG);
t.show();
} else {
setUpVerificationCallbacks();
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber,
60,
TimeUnit.SECONDS,
this,
verificationCallbacks
);
}
// }
}
使用调试器,我发现 'id' 值是正确的。
我为 sendCode() 使用了 Firebase 文档,用户注册工作正常,就像发送短信一样。我想检查昵称是否已经存在,并且该值在'id' Textview 中。我通过一个按钮调用 sendCode()。
我尝试过这种方式,但不起作用。使用调试器运行用户的结果为null
private User readUserByName(){
final User[] user = {new User()};
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child(nick).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
user[0] = dataSnapshot.getValue(User.class);
Log.d("Tag", user[0].toString());
}
else
Log.e("Tag","No such user exists");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return user[0];
}
【问题讨论】:
-
请添加您的数据库结构。
-
我添加了结构
标签: database android-studio firebase firebase-realtime-database listener