首先,我正在开发一个应用程序,它的主要活动是Main2Activity。该活动包含5个片段:“主页”,“设置”,“新建”,“通知”和“配置文件”。
今天,我什至没有触摸此文件的代码,就开始收到此错误:
Main2Activity:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.heirup, PID: 15134
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.heirup/com.example.heirup.Main2Activity}: java.lang.NullPointerException: Provided document path must not be null.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: 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.3:147)
at com.google.firebase.firestore.CollectionReference.document(com.google.firebase:firebase-firestore@@21.4.3:103)
at com.example.heirup.Main2Activity.setNotificationBadge(Main2Activity.java:142)
at com.example.heirup.Main2Activity.onCreate(Main2Activity.java:84)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
这是我得到错误的方法:
private void setNotificationBadge(Context context) {
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
rootRef.collection("users").document(userId).collection("notifications").limit(10).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
for (DocumentSnapshot documentSnapshot : documentSnapshots.getDocuments()) {
switch (documentSnapshot.getString("type")) {
case "USER_HAS_APPLIED":
//irrelevant
break;
case "ENOUGH_APPLICANTS":
//irrelevant
break;
case "JOB_HAS_STARTED":
//irrelevant
break;
case "JOB_HAS_ENDED":
//irrelevant
break;
case "JOB_HAS_EXPIRED":
//irrelevant
break;
}
}
for (Notification notification : notificationsList) {
if (!notification.isRead())
newNotifications++;
}
if (newNotifications > 0 && !checkedNotification) {
int menuItemId = navView.getMenu().getItem(3).getItemId();
badgeDrawable = navView.getOrCreateBadge(menuItemId);
badgeDrawable.setVisible(true);
badgeDrawable.setNumber(newNotifications);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(context, "No document found", Toast.LENGTH_SHORT).show();
}
});
}
基本上,userId是错误的,但是怎么可能呢?我正在使用private String userId = FirebaseAuth.getInstance().getCurrentUser().toString();
来检索它,并且它一直都在工作。
我进行了一些研究,并阅读了一些开发人员在为他们的应用实现“签出”功能后遇到的问题。具有讽刺意味的是,我今天确实在我的SettingsFragment中实现了这一点:
SettingFragment-> onCreateView()
signOut = root.findViewById(R.id.sign_out_btn); signOut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FirebaseAuth.getInstance().signOut(); Intent intent = new Intent(getContext(), LoginActivity.class); startActivity(intent); } });
有人能给我任何线索吗?希望我已经足够清楚了..
首先,我正在开发一个应用程序,它的主要活动是Main2Activity。该活动包含5个片段:“主页”,“设置”,“新建”,“通知”和“配置文件”。今天,甚至没有触摸...
FirebaseAuth.getInstance().getCurrentUser().toString()
不返回用户ID。它返回FirebaseUser对象的字符串形式,这完全是另外一回事。您将要改用FirebaseAuth.getInstance().getCurrentUser().getUid()
。