如何从firebase数据库存储中检索数据并将其显示到自定义列表视图中?

时间:2018-02-20 15:36:46

标签: android listview firebase

我发现很难在ListView中显示我的社区节点。 这是我在Firebase中的树: My Firebase tree

我想在Android列表中的ListView中显示包含三个社区(community1,2,3)的三个项目及其详细信息MessageSentCount,MessageReceivedCount。

我在Android中的新手也是在Firebase中,我遵循了许多教程并在尝试应用程序崩溃时 我的班级:

    DatabaseReference dref;
    ListView listView;
    ArrayList<String> list = new ArrayList<>();
    ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_analyze);

    listView =(ListView)findViewById(R.id.listview);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,list);
    listView.setAdapter(adapter);

    dref = FirebaseDatabase.getInstance().getReference("clusters");
    dref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String value = dataSnapshot.getValue(String.class);
            list.add(value);
            adapter.notifyDataSetChanged();
        }

我的layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"/>
    <Button
        android:id="@+id/button_discover"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="@string/button_discover"
        android:onClick="discoverYourself"/>
</LinearLayout>

我检查了许多教程,但还没有找到解决方案。请帮助我。

谢谢:)

1 个答案:

答案 0 :(得分:1)

  • 嗨,请在添加子项时尝试添加日志消息

    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
               String value = dataSnapshot.getValue(String.class);
               Log.e("value",value)
               list.add(value);
               adapter.notifyDataSetChanged();
           } 
    

    确保有一些孩子,问题出现在你身上 列表视图

  • 然后尝试更改:adapter.notifyDataSetChanged(); <{1}}

  • 还尝试在您的xml上更改此内容:adapter.notifyItemInserted(list.size()-1);android:layout_height="0dip"

修复转化例外:

android:layout_height="wrap_content"