根据 Activity 的生命周期,onCreate() 在应用创建时会被调用一次,然后 onStart() 方法在整个 Activity 生命周期中可能会被调用多次。然而这并不是发生在我身上的事情。
我的 onCreate 方法中有以下代码:
mRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Gig thisGig = dataSnapshot.getValue(Gig.class);
loadedGigs.add(thisGig);
Log.w("onCreate", "There are " + loadedGigs.size() + "Gigs loaded in the array.");
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
然后我有我的 onStart 方法:
@Override
protected void onStart()
{
super.onStart();
Log.w("onStart", "There are " + loadedGigs.size() + "Gigs loaded in the array.");
}
这是日志:
V/FA: onActivityCreated
W/onStart: There are 0Gigs loaded in the array.
V/FA: Activity resumed, time: 2460468116
D/FA: Logging event (FE): screen_view(_vs), Bundle[{ga_event_origin(_o)=auto, ga_previous_class(_pc)=search_gigs_activity, ga_previous_id(_pi)=-5229767692724064313, ga_screen_class(_sc)=search_gigs_results_activity, ga_screen_id(_si)=-5229767692724064312}]
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
W/onCreate: There are 1Gigs loaded in the array.
W/onCreate: There are 2Gigs loaded in the array.
W/onCreate: There are 3Gigs loaded in the array.
V/FA: Inactivity, disconnecting from the service
我还有其他代码,但我将其全部删除,因为我不断收到空指针异常并且无法弄清楚原因。事实证明,我试图从 onStart 方法内部访问“loadedGigs”数组列表,认为它已经从 onCreate 方法填充。
关于为什么会发生这种情况有什么想法吗?我最好的猜测是这与我使用 Firebase 和子事件侦听器有关。我缺乏相当多的知识,我想这就是为什么我无法弄清楚的原因。
提前谢谢,
弗拉德