Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android按日期键订购Firebase项目_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Android按日期键订购Firebase项目

Java Android按日期键订购Firebase项目,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我在firebase中有一个子项列表,密钥名为dates。现在我想以这样的方式对这些项进行排序,以便我可以首先查看最新的日期项,并且我正在使用自定义采用程序使用FirebaseRecyclerAdapter显示此数据,我还需要在单击项时获取子项密钥: 这就是我孩子的长相 这是我显示数据的代码 DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("winners");

我在firebase中有一个子项列表,密钥名为dates。现在我想以这样的方式对这些项进行排序,以便我可以首先查看最新的日期项,并且我正在使用自定义采用程序使用FirebaseRecyclerAdapter显示此数据,我还需要在单击项时获取子项密钥: 这就是我孩子的长相

这是我显示数据的代码

  DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("winners");
        Query personsQuery = personsRef.orderByKey();

        mPeopleRV.hasFixedSize();


        LinearLayoutManager mLayoutManager = new LinearLayoutManager(Notification.this);
        mLayoutManager.setReverseLayout(true);
        mLayoutManager.setStackFromEnd(true);

        mPeopleRV.setLayoutManager(mLayoutManager);

        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();

        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {


                holder.setTitle(capitalize(model.getName()));
                holder.setDesc(model.getDate().replace('-', ' '));
                holder.setAmount(model.getAmount());
                holder.setImage(getBaseContext(), model.getImg());


                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                       //Here i need child key when click on item (Date)


                    }
                });
            }

            @Override
            public Notification.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.news_row, parent, false);

                return new Notification.NewsViewHolder(view);
            }
        };

        mPeopleRV.setAdapter(mPeopleRVAdapter);
DatabaseReference personsRef=FirebaseDatabase.getInstance().getReference().child(“赢家”);
Query personsQuery=personsRef.orderByKey();
mPeopleRV.hasFixedSize();
LinearLayoutManager mllayoutmanager=新的LinearLayoutManager(Notification.this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mPeopleRV.setLayoutManager(mllayoutmanager);
FirebaseRecyclerOptions personOptions=新建FirebaseRecyclerOptions.Builder().setQuery(personQuery,News.class).build();
mPeopleRVAdapter=新的FirebaseRecyclerAdapter(PersonOptions){
@凌驾
受保护的无效onBindViewHolder(Notification.NewsViewHolder,最终整型位置,最终新闻模型){
holder.setTitle(大写(model.getName());
holder.setDesc(model.getDate().replace('-','');
holder.setAmount(model.getAmount());
setImage(getBaseContext(),model.getImg());
holder.mView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//这里我需要在单击项目(日期)时使用子密钥
}
});
}
@凌驾
public Notification.NewsViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.news_行,父级,假);
返回新通知。NewsViewHolder(视图);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
我需要的东西:

  • 按日期订购项目(本例中第一次过帐的最新日期
    2018年9月2日)

  • 用户单击项目时获取密钥(密钥即日期)


  • 除非在数据库模式中进行一些更改,否则无法按日期对项目进行排序。即使您的密钥持有“日期之王”(2018年9月2日),也无法按日期对其进行排序,因为所有Firebase密钥都是字符串,并且当字符串被排序时,都是按字典顺序排序的

    要解决这个问题,您应该向每个对象添加一个新的
    时间戳
    属性,如所述。假设这些对象位于名为
    dates
    的节点内,只需使用如下查询:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query query = rootRef.child("dates").orderByChild("timestamp");
    query.addListenerForSingleValueEvent(/* ... */);
    

    是的,我有一个孩子,其日期值类似于“2017年7月20日”,但它是字符串格式,我可以按此订购吗?不,您不能。您应该将该属性更改为包含一个
    时间戳,而不是我在那篇文章的回答中解释的字符串,好吗?是否有任何方法可以通过java脚本在现有数据中实现这一点?如果我从服务器插入此数据(使用javascript)并在android设备中读取,则没有其他方法。你应该做出改变,这会解决你的问题。