[英]Reading data from db
我有数据库,这里有 JSON 文件:
{
"User": {
"mail@gmail::com": {
"-NKTbcSqxmB4XImNrpDq": {
"Q": 0,
"W": 0,
"QW": 0,
"WQ": 0,
}
},
mail@gmail:com": {
"-NKTbcTUBxMsXYopKMO-": {
"Q1": 0,
"W1": 0,
"QW1": 0,
"WQ1": 0,
}
}
}
}
当按下按钮时,我需要一次读取数据,所以我需要使用这个监听器:
database.child("User").child(getMail1).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
User value = dataSnapshot.child("User").child(getEmail1).getValue(User.class);
//saving data in sharedPreferences
PreferenceConfig.Q1(getApplicationContext(), Q1);
PreferenceConfig.W1(getApplicationContext(), W1);
PreferenceConfig.QW1(getApplicationContext(), QW1);
PreferenceConfig.WQ1(getApplicationContext(), WQ1);
}
});
getEmail - 变量 mail@gmail::com USER_KEY - 具有用户 ID 的变量 紧接着,我为第二封邮件创建了与上面完全相同的代码,只是使用了其他值:
database.child(USER_KEY).child(getMail).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
User value = dataSnapshot.child("User").child(getEmail).getValue(User.class);
//saving data in sharedPreferences PreferenceConfig.Q(getApplicationContext(), Q);
PreferenceConfig.W(getApplicationContext(), W);
PreferenceConfig.QW(getApplicationContext(), QW);
PreferenceConfig.WQ(getApplicationContext(), WQ);
}
});
getEmail - var whitch 有数据 mail@gmail:com 这里是完整的代码:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
database.child("User").child(getMail1).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
User value = dataSnapshot.child("User").child(getEmail1).getValue(User.class);
PreferenceConfig.Q1(getApplicationContext(), Q1);
PreferenceConfig.W1(getApplicationContext(), W1);
PreferenceConfig.QW1(getApplicationContext(), QW1);
PreferenceConfig.WQ1(getApplicationContext(), WQ1);
}
});
database.child("User").child(getMail1).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
User value = dataSnapshot.child("User").child(getEmail).getValue(User.class);
PreferenceConfig.Q(getApplicationContext(), Q);
PreferenceConfig.W(getApplicationContext(), W);
PreferenceConfig.QW(getApplicationContext(), QW);
PreferenceConfig.WQ(getApplicationContext(), WQ);
}
});
});
但是数据不是来自数据库。 没有错误,尽管我是这样显示的:
Log.e("TaskEEEE", String.valueOf(task.getException())); 为什么读不到数据??
由于您从数据库中获取路径/User/$getMail1
中的数据,因此task
变量仅包含该数据的结果快照。 您可以通过调用获得此结果:
database.child("User").child(getMail1).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
User value = task.getResult().getValue(User.class); // 👈
...
另请参阅有关一次获取数据的 Firebase 文档,我基于此回答。
此外,您似乎在 email 下有一个推送密钥,这将要求您知道密钥或在子节点上使用循环来获取属性:
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
for (DataSnapshot userSnapshot: task.getResult().getChildren()) { // 👈
User value = userSnapshot.getValue(User.class);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.