【问题标题】:How to display a listview by comparing values in android如何通过比较android中的值来显示列表视图
【发布时间】:2019-07-08 12:10:08
【问题描述】:

我有一个带有列表视图的应用程序。目前它显示了我输入到数据库的所有数据。我想通过比较当前时间和我输入到数据库的时间来显示来自 firebase 数据库的数据。

这里是代码

 lv = findViewById(R.id.listView);
        Query query = FirebaseDatabase.getInstance().getReference().child("Details");
        FirebaseListOptions<Member> options = new FirebaseListOptions.Builder<Member>()
                .setLayout(R.layout.list_view_item)
                .setQuery(query,Member.class)
                .build();
        adapter = new FirebaseListAdapter(options) {
            @Override
            protected void populateView(@NonNull View v, @NonNull Object model, int position) {
                check();

                TextView loc = v.findViewById(R.id.locs);
                TextView des = v.findViewById(R.id.dests);
                TextView bus = v.findViewById(R.id.busn);
                TextView tim = v.findViewById(R.id.time);

                Member db = (Member) model;
                loc.setText(db.getLocation().toString());
                des.setText(db.getDestination().toString());
                bus.setText(db.getBusname().toString());
                tim.setText(db.getTime().toString());
            }
        };
        lv.setAdapter(adapter);

}

 @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
    }


@Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
}

任何错误请指导我,我是 Android 新手。提前致谢:)

【问题讨论】:

  • 尝试使用 Compactor 对列表进行排序
  • “比较当前时间和我输入数据库的时间”是什么意思?

标签: java android firebase-realtime-database android-listview firebaseui


【解决方案1】:

您正在寻找 Firebase Database queries,它允许您过滤 Firebase 服务器上的数据。假设您有一个字段,其中包含详细信息下每个节点的时间戳(自 1970 年 1 月 1 日以来的毫秒数)。您可以使用以下方法获取一到两周前的每个子节点:

Query query = FirebaseDatabase.getInstance().getReference().child("Details");

long oneWeekInMillis = 7 * 24 * 60 * 60 * 1000;
long oneWeekAgo = System.currentTimestampMillis() - oneWeekInMillis;
long twoWeeksAgo = oneWeekAgo - oneWeekInMillis;

query = query.orderByChild(timestamp).startAt(twoWeeksAgo).endAt(oneWeekAgo);

您可以直接将此查询传递给适配器,就像您已经在做的那样。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多