안드로이드 RecyclerView에서 firebase database 역순 정렬 방법

원래 의도는 코드만으로도 간단한 어플을 만들 수 있도록 리뷰하려고 했는데...

디자인을 바꾸고, 코드 부분도 조금씩 수정하다보니 코드를 통으로 올리는 것은 어렵고 비효율적이라는 생각이 드네요. 


그래서, 부분 부분 중요한 코딩만 리뷰하려고 합니다.. ㅎㅎ (물론 이 포스팅을 보는 사람은 없지만 나중에 다시 공부하기 위해!ㅋㅋ)


얼마전에 RecyclerView까지 완료했었는데요. 



저때는 정말 간단한 RecyclerView였고 지금은 여기서 xml부분을 수정해서 이렇게 바꼈습니다! 

결과물부터 볼게요~

안드로이드 RecyclerView에서 firebase database 역순 정렬 방법

우선, 이전과 달라진 점은 


이전에는 링크와 제목을 직접 데이터베이스에 업로드 하면 그걸 불러오는 방식이었는데,


지금은 링크만 업로드 하면 og:tag를 통해 이미지(image), 제목(title), 설명(description)을 알아서 찾아서 파이어베이스 데이터베이스에 저장 후 불러오는 방식으로 바꿨습니다. 


OG Tag도 굉장히 유용한데요!! 이 부분은 다음에 다시 다루겠습니다!! 


리사이클러뷰에 파이어베이스의 데이터를 역순으로 정렬하는 방법

저는 분명 파이어베이스에서 이 기능을 간단하게 적용시켜줄 코드가 있을 줄 알았습니다.. 하지만 아무리 구글 검색을 해봐도 나오지 않네요 ㅠㅠ (제가 못찾는 걸수도 있습니다.)


아, 구글 검색 시 리사이클러 뷰 역순 정렬 방법이 있기는 합니다. 대신 그 방법은 데이터를 전부 불러왔을 경우에만 잘 작동합니다. ㅠ 저처럼 한번에 20개만 불러온 뒤, 스크롤을 맨 아래로 내렸을 때 다시 20개를 불러오게 만드려면 그 방법은 사용할 수 없어요. 이것도... 다음 포스팅에서 다뤄야겠네요ㅎㅎ


그래서 저만의 방식으로 코드를 짜봤습니다. 매우 간단합니다!! ㅎㅎ 


1. onCreate 윗 부분에 DatabaseReference, ListArray를 선언해주세요. 

DatabaseReference Dbref; 
List<article.articledata> contents;


2. ArrayList를 선언해주고, Firebase Database를 불러옵니다.

//arraylist 정의
contents = new ArrayList<>();
//firebase database 불러오기
Dbref = FirebaseDatabase.getInstance().getReference().child("article");

여기서 "article"는 database에서 불러올 Child 명을 적어주면 돼요~ 

안드로이드 RecyclerView에서 firebase database 역순 정렬 방법


3. 이제 이벤트리스너를 만들어줍니다.

//firebase database 불러오기
Dbref = FirebaseDatabase.getInstance().getReference().child("article");
Dbref.limitToLast(20).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for(DataSnapshot item : dataSnapshot.getChildren()){
            contents.add(0,item.getValue(Article.articledata.class));
        }
        oldestPostId = oldPost_get.get(0);
        adapter = new RecyclerViewAdapter(contents);
        list_recyclerview.setAdapter(adapter);
    }
    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
    }
});

Dbref.limitToLast(20) : 데이터베이스의 최신 데이터부터 20개를 불러옴

만약에 데이터가 1부터 20까지 았다고 하면 {1,2,3,4,5,6, ... ,18, 19, 20} 이렇게 불러오게 됩니다. 


4. 데이터를 역순으로 만들어 주기!


가장 중요한 부분이죠! 정말 쉽습니다. for문에서 contents에 추가할 때 앞쪽에 들어가도록 해 주면 됩니다.  

contents.add(0, 값)

for(DataSnapshot item : dataSnapshot.getChildren()){
    contents.add(0,item.getValue(Article.articledata.class));
}

이렇게 하면 {20,19,18, .... 3,2,1} 순으로 들어가게 되겠죠~! 완전 쉬운 방법이었습니다^^

댓글

Designed by JB FACTORY