2017-01-15 6 views
1

Firebase 데이터베이스의 각 하위 값을 읽은 다음 배열 목록에 저장하려고합니다.Android에서 Firebase 데이터베이스에서 여러 값 읽기

우선 변수를 생성하여 어떤 방법 으로든 액세스 할 수 있도록했습니다.

ArrayList<LatLng> latlngs = new ArrayList<>(); 

다음에서 onCreate 방법에, 나는이

mLocationDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot dsp : dataSnapshot.getChildren()) { 
       LocationCurrent post = dsp.getValue(LocationCurrent.class); 
       Double latitude = Double.parseDouble(post.getLatitude()); 
       Double longitude = Double.parseDouble(post.getLongitude()); 
       currentLocationLatLng = new LatLng(latitude, longitude); 
       latlngs.add(currentLocationLatLng); 

       Log.i("LAT LONGS IN", String.valueOf(latlngs)); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

로깅 잘가 작동했다, 나는 모든 LatLong 가치를 볼 수 있습니다. 그러나 onCreate 내부에서 동일한 로그를 호출하지만 위의 메서드 호출 외부에서 빈 배열을 가져옵니다.

Log.i("LAT LONGS OUT", String.valueOf(latlngs)); 

무엇이 가장 좋고 무엇이 최선의 해결책입니까?

답변

0

addListenerForSingleValueEvent를 사용하면 onDataChange 콜백이 향후에 비동기 적으로 호출됩니다. 다음 줄 바로 뒤에 뭔가를 기록하려고하면 onDataChange 콜백 내의 코드가 여전히 실행되지 않을 수 있습니다. 그것을위한 아무 수정도 없다, 간단하게 지금 순간에 초기화되지 않았다. 데이터를 사용하려면 onDataChange 콜백이 시작될 때까지 기다려야합니다.

+0

고맙습니다. 나는 아무런 문제가 없다는 것을 알기 위해 많은 시간을 보냈습니다. 그렇다면 내가 얻은 데이터로 어떻게 작업 할 수 있습니까? onDataChange 콜백이 시작될 때까지 기다리는 것이 무엇을 의미합니까? –

+1

mLocationDatabaseReference.addListenerForSingleValueEvent (...)를 호출하면 onDataChange (...) 메서드 내의 코드가 나중에 실행됩니다. 다음 초 또는 30 초 내에 의미가있을 수 있습니다. 기본적으로 firebase에서 가져 오는 데이터로 수행해야하는 모든 작업은 onDataChange 메소드에서 수행하십시오. –

관련 문제