Ondatachanged一旦完成就不保存变量值

时间:2017-07-26 17:11:06

标签: java android firebase

我的问题是,当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.");
                }
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为events方法中未定义onDataChange()列表。要解决此问题,请在onDataChange()方法中移动该列表的声明,否则它将为null。这是因为该方法的异步行为,甚至在将这些值添加到列表之前调用。

如果您想在onDataChange()方法之外使用这些值,请参阅此post的答案。