2016-12-27 1 views
0

저는 Java에 매우 익숙합니다.안드로이드 : 파이어베이스 Datasnapshot과 클래스 레벨 배열리스트에 키를 저장하는 방법?

나는 Firebase 데이터베이스를 통해 루프를 만들고 모든 자식의 키 집합을 ArrayList에 저장하려고합니다. 내가 addValueEventListener 메서드 내에서 ("앱 정보 중") newArray를 기록 할 때

public class MainActivity extends AppCompatActivity { 

private DatabaseReference mRefEvents; 
private List<String> newArray; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mRefEvents = FirebaseDatabase.getInstance().getReferenceFromUrl("https:***"); 
    newArray = new ArrayList<String>(); 


    mRefEvents.addValueEventListener(new ValueEventListener() 
    { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) 
     { 
      for (DataSnapshot child : dataSnapshot.getChildren()) 
      { 
       for (DataSnapshot grandChild : child.getChildren()) 
       { 
        newArray.add(grandChild.getKey()); 
       } 
      } 
      Log.i("App info middle", newArray.toString()); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) 
     { 
     } 
    }); 

    Log.i("App info end", newArray.toString()); 
} 
} 

, 나는 내가 필요한 정확한 값을 얻을 :

다음은 코드의 짧은 버전입니다. 그러나 하단의 두 번째 로그 ("App info end")는 빈 배열을 제공하고 ArrayList newArray에 키를 저장하지 않습니다.

나는 간단한 것을 놓치고있을 것이라고 확신하지만 어떤 제안이라도 대단히 감사하겠습니다. 감사!

답변

0

모든 것을 한 번에 실행하는 것처럼 보입니다. 리스너가 비동기 적으로 실행되기 때문에 "App Info Middle"수신기에서 로그를 누르기 전에 하단의 "App Info End"에서 로그를 치는 것이 상상됩니다. 다른 방법으로 또는 버튼 클릭 후 "App info End"를 실행하면 배열이 채워져 있어야합니다. 이 모든 것을 말하면서 출력물을 콘솔에 게시하여 App Info Middle가 App info Middle 전에 적중하고 있는지 확인할 수 있습니까?

+1

당신은 절대적으로 알렉산더였습니다. 다음은 콘솔 출력입니다. –

+1

12-26 20 : 02 : 13.175 8247-8247/com.example.kaznaur.simafirebasetrial I/App 정보 끝 : [] 12-26 20 : 02 : 14.259 8247-8247/com.example. kaznaur.simafirebasetrial I/App 정보 중간 : [토론, 연설, 학사, 주부, 음성, 축구] 12-26 20 : 02 : 20.760 8247-8247/com.example.kaznaur.simafirebasetrial I/App 정보 buttonClick : [토론 , Speach, Bachelor, Housewives, Voice, Football] 12-26 20 : 02 : 30.311 8247-8247/com.example.kaznaur.simafirebasetrial I/App 정보 buttonClick : [토론, 연설, 학사, 주부, 음성, 축구] –

+0

Firebase를 사용할 때 처음에는 나를 넘어 뜨 렸습니다. 그것이 당신을 위해 굴러 다행. –

관련 문제