【问题标题】:Cannot Access Value of Cloud Firestore Child无法访问 Cloud Firestore 子项的值
【发布时间】:2018-02-13 02:49:08
【问题描述】:

我有一个如下所示的 Firebase Cloud Firestore 数据结构,并且想要访问“A1”:

我正在尝试访问每个“答案”文档,其中包含实际答案和随后的投票计数。然后我使用这个答案信息来填充单选按钮。

目前,我在 x9ojsg4tzLgx2SRTnhp 有一个 DocumentSnapshot 参考。从该参考资料中,我调用了答案集合,如下所示:

public void addRadioButtonsWithFirebaseAnswers(int numberOfAnswers, DocumentSnapshot documentSnapshot) {
    mPollAnswerArrayList = new ArrayList<RadioButton>();
    for (int i = (numberOfAnswers - 1); i >= 0; i--) {
        Log.e("Number of Answers", "The number of answers is " + numberOfAnswers);
        final int indexCreated = ((numberOfAnswers - 1) - i);
        mPollAnswerArrayList.add((indexCreated), new RadioButton((getActivity().getApplicationContext())));
        mPollAnswerArrayList.get(indexCreated).setId(indexCreated);
        String firebaseChild = String.valueOf(indexCreated + 1);
        documentSnapshot.getReference().collection(ANSWERS_LABEL).document(firebaseChild).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {
                Answer answer = documentSnapshot.toObject(Answer.class);
                mPollAnswerArrayList.get(indexCreated).setText(answer.getAnswer());
                Log.v("TAG FOR DOCREF", answer.getAnswer());
            }
        });

这是我的答案模型:

    @IgnoreExtraProperties
    public class Answer {

      private String answer;
      private int vote_count;

      public Answer(String answer, int vote_count){
          this.answer = answer;
          this.vote_count = vote_count;
      }

      public String getAnswer() {
          return answer;
      }

      public int getVote_count() {
          return vote_count;
      }
  }

我收到一个空指针:

java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[])' 在一个 空对象引用 在 com.google.android.gms.internal.zzevb$zza.zza(未知来源) 在 com.google.android.gms.internal.zzevb.zza(未知来源) 在 com.google.android.gms.internal.zzevb.zza(未知来源) 在 com.google.firebase.firestore.DocumentSnapshot.toObject(未知 来源) 在 com.troychuinard.fanpolls.Fragment.PollFragment$6.onSuccess(PollFragment.java:534) 在 com.troychuinard.fanpolls.Fragment.PollFragment$6.onSuccess(PollFragment.java:531) 在 com.google.android.gms.tasks.zzj.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5527) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    为 Answer 添加一个公共的无参数构造函数。所有 JavaBean 类型的对象都应该有一个,这样就可以使用反射来创建它的实例,而不必猜测如何正确地将参数传递给它。

    public Answer() {}
    

    【讨论】:

    • 非常感谢我的简单错误
    猜你喜欢
    • 2018-09-15
    • 2020-02-01
    • 1970-01-01
    • 2022-01-16
    • 2019-02-07
    • 2020-04-26
    • 2020-09-29
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多