2017-07-26 56 views
0

我的問題是,當onDataChange函數運行時,它不會保存添加到事件中的值。事件列表確實存在於onDataChange內,但是一旦我嘗試訪問其外側的值,它就會有更長的時間。我不太清楚如何解決這個問題。Ondatachanged完成後不保存變量值

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

這種情況發生,因爲你的events列表中沒有的onDataChange()方法中定義。爲了解決這個問題,請在onDataChange()方法內移動該列表的聲明,否則它將爲空。這是由於該方法的異步行爲,即使您將這些值添加到列表之前調用。

如果您想要使用onDataChange()方法以外的值,請參閱我的回答post

+0

謝謝。有效。 –

+0

如果您認爲我的回答對您有幫助,請考慮接受並投票。謝謝! –