【发布时间】:2021-08-27 01:00:02
【问题描述】:
当我尝试访问“EventDetail”活动时,应用程序不断返回到 MainActivity。当我添加 joinBtn.setOnClickListener 并根据给出的建议根据之前的帖子进行修改时会发生这种情况:Is there a method can be used to modify particular document in Firestore when user click on a card?
这里有人可以帮我解决这个问题吗?提前谢谢你。
public class EventDetail extends AppCompatActivity {
private static final String TAG = "DetailActivity";
EventModel event;
private TextView textViewEName, textViewEVenue, textViewEDate, textViewEDesc;
private Button joinBtn;
private FirebaseFirestore fStore;
private FirebaseUser user;
private FirebaseAuth fAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_detail);
Log.d(TAG, "onCreate: Started.");
fStore = FirebaseFirestore.getInstance();
user= FirebaseAuth.getInstance().getCurrentUser();
textViewEName = (TextView)findViewById(R.id.textEventNameDetail);
textViewEDate = (TextView)findViewById(R.id.textEventDateDetail);
textViewEVenue = (TextView)findViewById(R.id.textEventVenueDetail);
textViewEDesc = (TextView)findViewById(R.id.textEventDescDetail);
joinBtn=findViewById(R.id.joinBtn);
textViewEName.setText(getIntent().getStringExtra("eventName").toString());
textViewEDate.setText(getIntent().getStringExtra("eventDate").toString());
textViewEVenue.setText(getIntent().getStringExtra("eventVenue").toString());
textViewEDesc.setText(getIntent().getStringExtra("eventDesc").toString());
//When particular event card is click
joinBtn.setOnClickListener(new View.OnClickListener() {
//Make addEvent object 'a' to access variable in addEvent
AddEvent a = new AddEvent();
@Override
public void onClick(View v) {
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference collRef= rootRef.collection("users");
Map<String, Object> update = new HashMap<>();
update.put("eventDocId", a.eventDocId);
DocumentReference docId = collRef.document(user.getUid());
docId.update("saved_event", update).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull @NotNull Task<Void> task) {
Log.d(TAG, "Update complete.");
}
});
}
});
}
}
我添加这段代码后出现错误。
joinBtn.setOnClickListener(new View.OnClickListener() {
//Make addEvent object 'a' to access variable in addEvent
AddEvent a = new AddEvent();
@Override
public void onClick(View v) {
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference collRef= rootRef.collection("users");
Map<String, Object> update = new HashMap<>();
update.put("eventDocId", a.eventDocId);
DocumentReference docId = collRef.document(user.getUid());
docId.update("saved_event", update).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull @NotNull Task<Void> task) {
Log.d(TAG, "Update complete.");
}
});
}
});
当我检查 logcat 时,出现这个错误:
2021-08-27 08:24:40.590 18531-18531/com.example.myvolunteer E/AndroidRuntime: 致命异常: main 进程:com.example.myvolunteer,PID:18531 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.myvolunteer/com.example.myvolunteer.EventDetail}:java.lang.NullPointerException:尝试调用虚拟方法 'com.google.firebase.firestore.CollectionReference com。 google.firebase.firestore.FirebaseFirestore.collection(java.lang.String)' 在空对象引用上 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:246) 在 android.app.ActivityThread.main(ActivityThread.java:8512) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1139) 引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'com.google.firebase.firestore.CollectionReference com.google.firebase.firestore.FirebaseFirestore.collection(java.lang.String)' 在 com.example.myvolunteer.AddEvent.(AddEvent.java:40) 在 com.example.myvolunteer.EventDetail$1.(EventDetail.java:63) 在 com.example.myvolunteer.EventDetail.onCreate(EventDetail.java:61) 在 android.app.Activity.performCreate(Activity.java:8198) 在 android.app.Activity.performCreate(Activity.java:8182) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3765)
【问题讨论】:
-
我认为您尝试更新的文档在 Firestore 数据库中不存在。
-
在
onComplete中您是否添加了这样的if语句:if(task.isSuccesfull)然后在成功和失败时执行您的操作。 -
@VaibhavGoyal 请参考我附上的db结构图。
-
@VishalBeep 我刚刚试了一下,还是一样。
-
您在哪一行代码中遇到了 NullPointerException?
标签: java android firebase google-cloud-firestore