我通常使用 firebase 数据库,比如常量“名称”和变量“值”,但现在根据我的新项目,我试图将它们都作为变量,这意味着两者都不是由我决定的,而是由用户决定的...像这样 - https://ibb.co/cGh3qJ
我的错误 - https://ibb.co/hiJ4xy
代码
获取数据
Results results;
String Name, Score;
private void fetchResults() {
mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
Name = childDataSnapshot.getKey().toString();
Score = String.valueOf(childDataSnapshot.child(Name).getValue(Results.class));
results = new Results(Name, Score);
resultsList.add(results);
mAdapter.notifyDataSetChanged();
}
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
类
public class Results {
private String Name;
private String Score;
public Results() {
}
public Results(String Name, String Score) {
this.Name = Name;
this.Score = Score;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getScore() {
return Score;
}
public void setScore(String score) {
Score = score;
}
任何人都可以指出我哪里出错了......之前我也不知道这个名字,但不知何故我设法得到它,现在却在为得分而苦苦挣扎
错误
Process: com.appmaster.akash.messageplus, PID: 8881
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.appmaster.akash.messageplus.TakingQuizDone$1.onDataChange(TakingQuizDone.java:68)
at com.google.android.gms.internal.zzduz.zza(Unknown Source)
at com.google.android.gms.internal.zzdwu.zzbvb(Unknown Source)
at com.google.android.gms.internal.zzdxa.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:742)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5571)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
最佳答案
改变这个:
Score = String.valueOf(childDataSnapshot.child(Name).getValue(Results.class));
进入这个:
Score =childDataSnapshot.child(Name).getValue().toString();
您的数据快照位于 userid
处,然后您在其中迭代并使用 getKey()
来检索名称,然后检索值,只需获取 child Name
的值。
关于java - firebase 数据库中子项的值显示为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50915474/