【问题标题】:How to list data from Firebase database in listview?如何在列表视图中列出 Firebase 数据库中的数据?
【发布时间】:2017-01-02 23:22:55
【问题描述】:

我目前正在创建一个应用程序,它在实时数据库中记录一个 6 位数的 int id(值)和它们被记录的时间/日期(键)。我正在尝试创建一个单独的应用程序,通过将数据库键值列为列表中的项目,并使用搜索查询来搜索 id。

我的问题是,我应该如何在我的 listView 中检索和列出键和值作为项目?这些项目也需要实时添加,因此可以像在 Firebase 控制台中一样查看它们。谢谢!

【问题讨论】:

  • 你有没有尝试过?请分享相关代码sn-ps。
  • 对不起,我会记住以后的问题。谢谢!

标签: android listview firebase firebase-realtime-database


【解决方案1】:
public ArrayList<String> arr;
public ArrayAdapter adapter;

@Override
protected void onStart() {
    super.onStart();

    DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
    arr = new ArrayList<>();

    ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            map2list((Map) dataSnapshot.getValue());
            //formats the datasnapshot entries to strings
            adapter.notifyDataSetChanged();
            //makes the ListView realtime
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            System.out.println(databaseError.toException());
            // ...
        }
    };
    mDatabase.addValueEventListener(listener);

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, arr);

    ListView listView = (ListView) findViewById(R.id.yourOwnListView);
    listView.setAdapter(adapter);


}

public void map2list(Map<String,Long> map){

    arr.clear();
    for (Map.Entry<String, Long> entry : map.entrySet()) {

        Long key = Long.parseLong(entry.getKey());
        String d = DateFormat.getDateTimeInstance().format(key);
        Long value = entry.getValue();
        arr.add(d + ": " + value);
    }

}

我在自己的数据库上对此进行了测试,它可以工作。

map2list() 是我为列表视图格式化数据的快速方法。最好的方法是使用自定义 arrayadapter 或 baseadapter,但这涉及的代码比本示例所需的要多。

请注意,将您的密钥保留为时间是一个坏主意,因为如果同时生成两个日志,您可能会发生冲突。

最后,firebase 使用 Longs 而不是 int,所以我使用 Longs 来减少代码

【讨论】:

  • 非常感谢!!!这段代码在我的项目上完美运行。顺便说一句,我的扫描仪每隔一秒上传一次,所以我想碰撞一开始就不会成为问题,但无论如何感谢您指出这一点。
  • 如果我想在 listview 项目上添加一个 onItemClickListener 并打开一个新活动,该活动显示来自 firebase 数据库的不同数据。有可能吗?
  • 当然可以,但与这个问题不同。为此,请将适当的 onItemClickListener 附加到您的列表视图。然后在 onItemClick 抽象方法中,创建一个包含与列表项相关的额外内容的新意图,并将该意图指向新活动。调用 startActivity 后,在新活动中进行必要的 Firebase 检索。这就是高级要点,如果您想了解详细信息,请打开一个新的 SO 问题并将我指向我,我很乐意回答。
猜你喜欢
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2011-08-08
  • 2020-05-04
  • 2017-12-15
相关资源
最近更新 更多