如何将数据从 firebase 检索到 ListView?

Posted

技术标签:

【中文标题】如何将数据从 firebase 检索到 ListView?【英文标题】:How to retrieve the data from firebase into a ListView? 【发布时间】:2016-12-18 01:19:36 【问题描述】:

我看到了这段代码,但它在 TextView 中检索数据,但我希望将其设置在 ListView 中。 我该怎么做? 这是我试过的代码:

ref.addValueEventListener(new ValueEventListener() 

    @Override
    public void onDataChange(DataSnapshot snapshot) 
        for (DataSnapshot postSnapshot : snapshot.getChildren()) 
            //Getting the data from snapshot 
            Person person = postSnapshot.getValue(Person.class);

            //Adding it to a string 
            String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n";

            //Displaying it on textview
            textViewPersons.setText(string);
        
    

    @Override
    public void onCancelled(FirebaseError firebaseError) 
        System.out.println("The read failed: " + firebaseError.getMessage());
    

这是我的 ListView 代码:

messageList = (ListView) findViewById(R.id.messageList);
messages = new ArrayList<Message>();
mAdapter = new MyArrayAdapter(this, messages);
messageList.setAdapter((ListAdapter) mAdapter);

【问题讨论】:

update listview dynamically with adapter的可能重复 作为替代方案:看看using the FirebaseListAdapter provided in FirebaseUI。 【参考方案1】:

您可以使用FirebaseUI for android 库。

只需添加依赖项(0.4.4 适用于 firebase 9.4.0 库):

dependencies 
    // Single target that includes all FirebaseUI libraries
    compile 'com.firebaseui:firebase-ui:0.4.4'

然后将 ListView 与 Adapter 连接(在本例中为人员列表):

ListView personsView = (ListView) findViewById(R.id.mylist);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
mAdapter = new FirebaseListAdapter<Person>(this, Person.class, R.layout.myItemLayout, ref) 
        @Override
        protected void populateView(View view, Person person, int position) 
             //Populate the item           
         
    ;
personsView.setAdapter(mAdapter);

【讨论】:

【参考方案2】:

首先,您需要修复对象类型。您的适配器(和支持 ArrayList)具有 Message 对象,但 Firebase 为您提供 Person 对象。

假设你让 Adapter 接受 Person 对象,只需添加到 Adapter

ref.addValueEventListener(new ValueEventListener() 

     @Override
    public void onDataChange(DataSnapshot snapshot) 
        for (DataSnapshot postSnapshot : snapshot.getChildren()) 
            //Getting the data from snapshot 
            Person person = postSnapshot.getValue(Person.class);
           mAdapter.add(person);

【讨论】:

以上是关于如何将数据从 firebase 检索到 ListView?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Firebase 检索到我的适配器

如何从firebase检索多个数据到android中的列表视图?

如何从从 Firebase 检索信息的闭包中传递数据?

如何从 Firebase 检索数据到 ListView(使用自定义数组适配器)

从firebase检索数据到android

如何使用 StreamBuilder 将数据从 firebase firestore 检索到颤振中,并使用 ListView.builder 显示值?