0
{
    "YoZSiyACIqSBNXU7XKv56olKOv92":
    {
        "-KpJVrAUg9yCPNptU-jY":
        {
            "cmt": "hello",
            "ids": "-KpJVrAIVocWckK-vEd2",
            "imgid": "-KpJT3Ygd8U3yf9nN-Yr",
            "timestamp": "1500361488354",
            "userid": "surabhipaul.gkp2008@gmail.com"
        },
        "-KpoR8S99tMm1fDmlwaR":
        {
            "cmt": "really",
            "ids": "-KpoR8S99tMm1fDmlwaQ",
            "imgid": "-KpJT3Ygd8U3yf9nN-Y,
            "timestamp": "1500897125323",
            "userid": "surabhipaul.gkp2008@gmail.com"
        }
    },
    "pTMeNLkIHqPmFOCPQcK2yjImdmi2":
    {
        "-KpU8HxLfohEtXIGJzi9":
        {
            "cmt": "hie",
            "ids": "-KpU8HxLfohEtXIGJzi8",
            "imgid": "-KpJT3Ygd8U3yf9nN-Yr",
            "timestamp": "1500539860639",
            "userid": "sanchisrivastava123@gmail.com"
        },

        "-KpoQo6615Y-U-DQ_Le1":
        {
            "cmt": "nice",
            "ids": "-KpoQo6-flNhGxZd4V19",
            "imgid": "-KpJT3Ygd8U3yf9nN-Yr",
            "timestamp": "1500897037891",
            "userid": "sanchisrivastava123@gmail.com"
        }
    }
}

How can I retrieve data according to timestamp so that data with newest timestamp is displayed first in recyclerview.

My code is:

  myref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            list = new ArrayList<>();
            for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){
                for(DataSnapshot data2 :dataSnapshot1.getChildren()){

                    Comment userdetails = data2.getValue(Comment.class);
                    final CommentData listdata = new CommentData();
                    final String cmt=userdetails.getCmt();
                    final String user = userdetails.getUserid();
                    final String cmtid = userdetails.getIds();


                                listdata.setNos(String.valueOf(c));
                                listdata.setCmt(cmt);
                                listdata.setUserid(user);
                                listdata.setComid(cmtid);


                                list.add(listdata);



                            RecyclerCommentAdapter recycler = new RecyclerCommentAdapter(list);
                            RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(getApplicationContext());
                            recyclerview.setLayoutManager(layoutmanager);
                            recyclerview.setItemAnimator( new DefaultItemAnimator());
                            recyclerview.setAdapter(recycler);
                        }


            }



        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Please tell how can I display newest data first on recyclerview based on its timestamp from firebase database. This is CommentData class:

public class CommentData {
    String cmt;
    String userid;
    String comid;
    String nos;

    public String getNos() {
        return nos;
    }

    public void setNos(String nos) {
        this.nos = nos;
    }

    public String getComid() {
        return comid;
    }

    public void setComid(String comid) {
        this.comid = comid;
    }


    public String getCmt() {
        return cmt;
    }


    public void setCmt(String cmt) {
        this.cmt = cmt;
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }


}
Surabhi
  • 23
  • 6

2 Answers2

0

The solution is pretty tricky, You need to change the key of your push to timestamp * -1

for example :

"YoZSiyACIqSBNXU7XKv56olKOv92":
{

    "-1500897125323":
    {
        "cmt": "really",
        "ids": "-KpoR8S99tMm1fDmlwaQ",
        "imgid": "-KpJT3Ygd8U3yf9nN-Y,
        "timestamp": "1500897125323",
        "userid": "surabhipaul.gkp2008@gmail.com"
    },
    "-1500361488354":
    {
        "cmt": "hello",
        "ids": "-KpJVrAIVocWckK-vEd2",
        "imgid": "-KpJT3Ygd8U3yf9nN-Yr",
        "timestamp": "1500361488354",
        "userid": "surabhipaul.gkp2008@gmail.com"
    }
}
Faruk
  • 5,438
  • 3
  • 30
  • 46
0
Collections.sort(list, new Comparator<CommentData>() {
                                @Override
                                public int compare(CommentData o1, CommentData o2) {
                                    return Long.compare(Long.parseLong(o2.time),
                                            Long.parseLong(o1.time));
                                }
                            });
Surabhi
  • 23
  • 6