firebase数据库中子项的值显示为null

时间:2018-06-18 18:29:57

标签: android firebase firebase-realtime-database

我通常使用firebase数据库,如常量'Name'和变量'Value',但现在根据我的新项目我试图将它们作为变量,这意味着两者都不是由我而是用户决定的......像这样 - 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)

2 个答案:

答案 0 :(得分:1)

改变这个:

 Score = String.valueOf(childDataSnapshot.child(Name).getValue(Results.class));

进入这个:

  Score =childDataSnapshot.child(Name).getValue().toString();

您的数据快照位于userid,然后您在其中进行迭代并使用getKey()来检索名称,然后检索该值以获取子{{1}的值}}

答案 1 :(得分:0)

您需要更改

$('#formButton').off().on('click', function () { 
   $(".fbutton").each(function () {
       $(this).prop("disabled", true);
   });
    $(this).prop("disabled", false);
});

$('#formButton2').off().on('click', function () { 
   $(".fbutton").each(function () {
        $(this).prop("disabled", true);
   });
   $(this).prop("disabled", false);
});

进入这个:

Score = String.valueOf(childDataSnapshot.child(Name).getValue(Results.class));

您的实施问题是您已经在迭代Score = (String) childDataSnapshot.getValue(); 的子项。因此,您不需要提供密钥并获取值,dataSnapshot具有值。