我的问题是,当onDataChange函数运行时,它不会保存添加到事件的值。事件列表确实存在于onDataChange中,但是一旦我尝试访问它外面的值,它就会更长。我不太清楚如何解决这个问题。
public void saveNewEvent(String uid, String eventId, String eventName, String eventHost,String eventTime, String eventAddress, String eventImage, String eventDescription) {
savedEventsCreated = false;
events.clear();
UserEvents info = new UserEvents(eventName, eventHost, eventTime, eventAddress, eventId, eventImage, eventDescription);
savedEvents.child("savedEvents").child(eventId).setValue(info);
users.child(uid).child("eventsList").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
events.add(postSnapshot.getValue().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
for (int i = 0; i < events.size(); i++)
Log.i("Info", events.get(i));
events.add(eventId);
users.child(uid).child("eventsList").setValue(events, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null) {
System.out.println("Data could not be saved " + databaseError.getMessage());
} else {
System.out.println("Data saved successfully.");
}
}
});
}
答案 0 :(得分:0)
发生这种情况是因为events
方法中未定义onDataChange()
列表。要解决此问题,请在onDataChange()
方法中移动该列表的声明,否则它将为null。这是因为该方法的异步行为,甚至在将这些值添加到列表之前调用。
如果您想在onDataChange()
方法之外使用这些值,请参阅此post的答案。