首页 > 解决方案 > Android Studio 上的对象返回 ID Null

问题描述

我试图检索由 firebase 随机生成的文档 ID。我想根据 ID 检索任务,所以如果我需要删除一堆任务,我可以选择任务并删除。我有下面的代码,我试图从 TaskList 类中检索 taskID,其中已经为字段初始化了 setter 和 getter,因此我可以删除特定任务。但是,当我运行代码时,它返回以下错误:

   E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.riseapp, PID: 2160
java.lang.NullPointerException: Provided document path must not be null.
    at com.google.firebase.firestore.util.Preconditions.checkNotNull(com.google.firebase:firebase-firestore@@21.4.2:147)
    at com.google.firebase.firestore.CollectionReference.document(com.google.firebase:firebase-firestore@@21.4.2:103)
    at com.example.riseapp.ViewTask.deleteTasks(ViewTask.java:183)
    at com.example.riseapp.ViewTask$3.onClick(ViewTask.java:113)
    at android.view.View.performClick(View.java:6608)
    at android.view.View.performClickInternal(View.java:6585)
    at android.view.View.access$3100(View.java:785)
    at android.view.View$PerformClick.run(View.java:25919)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6826)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

/// 删除任务的函数

  deleteBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            deleteTasks();
        }
    });
   }


    public void deleteTasks() {
    userId = mFirebaseAuth.getCurrentUser().getUid();
    TaskList taskList = new TaskList();
    taskId = taskList.getTaskID();
    taskID.setText(taskId);

    final Map<String, Object> myfields = new HashMap<>();

    myfields.remove("taskName");
    myfields.remove("startTime");
    myfields.remove("endTime");
    myfields.remove("taskDate");
    myfields.remove("notes");
    myfields.remove("priority");
    myfields.remove("energy");
    myfields.remove("taskTag");

    DocumentReference noteRef = fStore.collection("usersData").document(userId).collection("tasks").document(taskId);
    noteRef.set(myfields)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.d("tag", "Task Deleted Successfully");
                }
            });
}

标签: androidgoogle-cloud-firestore

解决方案


错误信息:

java.lang.NullPointerException: Provided document path must not be null.
    at com.google.firebase.firestore.util.Preconditions.checkNotNull(com.google.firebase:firebase-firestore@@21.4.2:147)
    at com.google.firebase.firestore.CollectionReference.document(com.google.firebase:firebase-firestore@@21.4.2:103)
    at com.example.riseapp.ViewTask.deleteTasks(ViewTask.java:183)

告诉您您将 null 传递给document()ViewTask.java 的第 183 行。

您将不得不调试您的应用程序以找出其中一个userIdtaskId为空的原因。我怀疑它是taskId,但我们看不到实际产生该值的原因。


推荐阅读