마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 파이어베이스 데이터 가져오기

0 추천

파이어베이스에 있는 데이터를 가져와서 배열로 받으려고 합니다.

 

private final ArrayList<String> sport= new ArrayList<>();
//파이어베이스에서 데이타를 읽어올 경로
databaseReference= FirebaseDatabase.getInstance().getReference().child("sport");
databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            String firemessage = snapshot.getValue().toString();    //문자열로 받기
            sport.add(firemessage);  //리스트에 추가
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
    }
});

이렇게 받았습니다. 여기서 

for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
......
}

이 부분을 빼면 파이어베이스에 있는 sport데이터의 배열이 통째로 들어가고,

이 부분을 넣으면(위 코드와 같이) sport 배열에 있는 첫번째 값만 들어갑니다.

전 하나씩 sport Arraylist에 넣고 싶은데 어떻게 해야되나요ㅜㅜㅜ

 

개발개발자 (1,100 포인트) 님이 2021년 1월 10일 질문

1개의 답변

0 추천
public void onDataChange(DataSnapshot dataSnapshot) {
       GenericTypeIndicator<List<String>> t = new GenericTypeIndicator<List<String>>() {};
       final List<Message> sports = dataSnapshot.getValue(t);
       ...
    }

파이어베이스 API 문서를 보니  datasnapshot를 generic type 으로 변환할 수 있네요.

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot#getValue(com.google.firebase.database.GenericTypeIndicator%3CT%3E)

 루프 필요없이 바로 List<String>으로 변환하신 다음 사용하시면 될 것 같아요.

spark (227,530 포인트) 님이 2021년 1월 10일 답변
댓글 감사합니다. 제가 파이어베이스에 있는 sport목록을 받아서 버튼을 누르면 하나씩 출력되게 만드려고 하거든요..근데 이렇게 바꿔도 첫번째꺼 하나만 출력되네요..
버튼 눌렀을 때 코드는
 private void onButtonClick(Boolean isPlus) {
        if (isPlus) {
            if (++i >= page || cnt++ >= page + 1) {    
                i = 0;
                cnt = 1;
            }
        } else {
            if (--i < 0 || --cnt < 1) {
                i = page - 1;
                cnt = page;
            }
        }
        pageTextView.setText(cnt + " / " + page);
        textView.setText(sport.get(i));       // sport 리스트에서 하나씩 출력
    }


이렇게 짰습니다...배열 쓸 땐 잘 출력 됐는데..파이어베이스에서 데이터를 다 못가져와서 그런가요
일단 데이터가 원하는 대로 파이어베이스에서 나오는지 확인하셔야 겠네요. 기존 로직이 변함이 없고 다만 데이터타입이 배열에서 List로 바뀐 것 외에는 없다면, 그쪽을 확인하시는게 빠를 것 같아요.
...