【问题标题】:How to retrieve arraylist from firebase database in recyclerview in android studio?如何从android studio的recyclerview中的firebase数据库中检索arraylist?
【发布时间】:2017-08-25 14:00:10
【问题描述】:

我想从存储在 firebase 数据库中的数据中填充我的 recyclerview。我尝试搜索网络,但大多数示例都有简单的 json 树结构,我的 Json db 具有以下格式:

我的android代码如下:

ModelClass.java

package com.example.android.directory;

import java.util.ArrayList;

public class ModelClass {

    private ArrayList<CategoryList> categoryList;

    public ModelClass(ArrayList<CategoryList> categoryList) {
        this.categoryList = categoryList;
    }

    public ArrayList<CategoryList> getCategoryList() {
        return categoryList;
    }

    public void setCategoryList(ArrayList<CategoryList> categoryList) {
        this.categoryList = categoryList;
    }



    public  static class CategoryList{
        public int Category_id;
        public String Category_name;
        public ArrayList<String>Emails;
        public ArrayList<String>Epabx;
        public ArrayList<String>Category_Fax;
        public ArrayList<Persons> persons;

        public CategoryList(int category_id, String category_name, ArrayList<String> emails,
                            ArrayList<String> epabx, ArrayList<String> category_Fax, ArrayList<Persons> persons) {
            Category_id = category_id;
            Category_name = category_name;
            Emails = emails;
            Epabx = epabx;
            Category_Fax = category_Fax;
            this.persons = persons;
        }

        public int getCategory_id() {
            return Category_id;
        }

        public void setCategory_id(int category_id) {
            Category_id = category_id;
        }

        public String getCategory_name() {
            return Category_name;
        }

        public void setCategory_name(String category_name) {
            Category_name = category_name;
        }

        public ArrayList<String> getEmails() {
            return Emails;
        }

        public void setEmails(ArrayList<String> emails) {
            Emails = emails;
        }

        public ArrayList<String> getEpabx() {
            return Epabx;
        }

        public void setEpabx(ArrayList<String> epabx) {
            Epabx = epabx;
        }

        public ArrayList<String> getCategory_Fax() {
            return Category_Fax;
        }

        public void setCategory_Fax(ArrayList<String> category_Fax) {
            Category_Fax = category_Fax;
        }

        public ArrayList<Persons> getPersons() {
            return persons;
        }

        public void setPersons(ArrayList<Persons> persons) {
            this.persons = persons;
        }
    }

    public static class Persons{
        private int Person_ID;
        private String Name;
        private String Designation;
        private String Office_Phone;
        private String Residence_Phone;
        private String VOIP;
        private String Address;
        private ArrayList<String>Fax;
        private String Ext;

        public Persons(int person_ID, String name, String designation, String office_Phone,
                       String residence_Phone, String VOIP, String address, ArrayList<String> fax, String ext) {
            Person_ID = person_ID;
            Name = name;
            Designation = designation;
            Office_Phone = office_Phone;
            Residence_Phone = residence_Phone;
            this.VOIP = VOIP;
            Address = address;
            Fax = fax;
            Ext = ext;
        }

        public int getPerson_ID() {
            return Person_ID;
        }

        public void setPerson_ID(int person_ID) {
            Person_ID = person_ID;
        }

        public String getName() {
            return Name;
        }

        public void setName(String name) {
            Name = name;
        }

        public String getDesignation() {
            return Designation;
        }

        public void setDesignation(String designation) {
            Designation = designation;
        }

        public String getOffice_Phone() {
            return Office_Phone;
        }

        public void setOffice_Phone(String office_Phone) {
            Office_Phone = office_Phone;
        }

        public String getResidence_Phone() {
            return Residence_Phone;
        }

        public void setResidence_Phone(String residence_Phone) {
            Residence_Phone = residence_Phone;
        }

        public String getVOIP() {
            return VOIP;
        }

        public void setVOIP(String VOIP) {
            this.VOIP = VOIP;
        }

        public String getAddress() {
            return Address;
        }

        public void setAddress(String address) {
            Address = address;
        }

        public ArrayList<String> getFax() {
            return Fax;
        }

        public void setFax(ArrayList<String> fax) {
            Fax = fax;
        }

        public String getExt() {
            return Ext;
        }

        public void setExt(String ext) {
            Ext = ext;
        }
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_card_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    tools:context="com.example.android.directory.MainActivity">

    <include
        android:id="@+id/tool_bar"
        layout="@layout/toolbar">
    </include>


    <EditText android:id="@+id/inputSearchMain"
        android:layout_below="@id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/edit_text_search"
        android:hint="@string/searchtext_hint"
        android:padding="5dp"
        android:textColor="#233343"
        android:inputType="textVisiblePassword"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginLeft="5dp"
        android:drawableRight="@drawable/search"/>

    <android.support.v7.widget.RecyclerView
        android:layout_below="@id/inputSearchMain"
        android:id="@+id/recyclerView_Main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical">
    </android.support.v7.widget.RecyclerView>

</RelativeLayout>

cardview_row_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.CardView
        android:id="@+id/cardView_mainActivity"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        card_view:cardCornerRadius="2dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="10dp">

            <ImageView
                android:id="@+id/govt_logo_Main"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/logo"
                android:layout_centerVertical="true"/>
            <TextView
                android:id="@+id/category_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"
                android:textSize="14sp"
                android:textColor="#233343"
                android:layout_centerInParent="true"/>
            <ImageView
                android:id="@+id/nextMain"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/next"
                android:background="#1DE9B6"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"/>



        </RelativeLayout>

    </android.support.v7.widget.CardView>

</RelativeLayout>

MainActivity.java

package com.example.android.directory;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    DatabaseReference databaseCategory;
    private ArrayList<ModelClass.CategoryList> mcategoryset;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        databaseCategory= FirebaseDatabase.getInstance().getReference().child("Category");
        recyclerView=(RecyclerView)findViewById(R.id.recyclerView_Main);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    }

    @Override
    protected void onStart() {
        super.onStart();
        FirebaseRecyclerAdapter<ModelClass,CategoryViewHolder>firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<ModelClass, CategoryViewHolder>(
                ModelClass.class, R.layout.cardview_row_main,CategoryViewHolder.class,databaseCategory
        ) {
            @Override
            protected void populateViewHolder(CategoryViewHolder viewHolder, ModelClass model, int position) {
                viewHolder.category_name.setText(model.getCategoryList().get);
            }
        };
        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }
}

在这个活动中,我应该如何从 firebase 数据库中检索“Category_name”?

【问题讨论】:

    标签: java android firebase-realtime-database


    【解决方案1】:

    使用这个

    在本地定义数组列表。

    ArrayList<ModelClass > md = new ArrayList<>();
    

    然后调用这个

        mFirebaseDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
    
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    //Getting the data from snapshot
                     md= postSnapshot.getValue(ModelClass .class);
    
                }
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
    
            }
        });
    

    然后将您的数组列表传递给回收器适配器。

    【讨论】:

    • 我应该在这里写什么:“viewHolder.category_name.setText(model.getCategoryList().get);”然后呢?
    • 您的代码在“md= postSnapshot.getValue(ModelClass .class);”处出现不兼容类型错误
    【解决方案2】:
     Query nm=d.orderByChild("pincode").equalTo(query);
             nm.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    GenericTypeIndicator<HashMap<String, Object>> objectsGTypeInd = new GenericTypeIndicator<HashMap<String, Object>>() {};
                    Map<String, Object> objectHashMap = dataSnapshot.getValue(objectsGTypeInd);
                    ArrayList<Object> objectArrayList = new ArrayList<Object>(objectHashMap.values());
                    Log.d("yahape",objectArrayList.toString());
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
    
                }
            });
    

    你必须这样做,它对数据库引用也一样。它对我很好。

    【讨论】:

      【解决方案3】:

      1.获取 DatabaseReference 实例

      DatabaseReference mDatabase = FirebaseApplication.getFirebaseDbInstance();

      2 .设置 Firebase 数据库监听器

      mDatabase.addChildEventListener(childEventListener);

      ChildEventListener childEventListener = new ChildEventListener()

      {
          @Override
          public void onChildAdded(DataSnapshot dataSnapshot, String s)
          {
      
          }
      
          @Override
          public void onChildChanged(DataSnapshot dataSnapshot, String s)
          {
      
          }
      
          @Override
          public void onChildRemoved(DataSnapshot dataSnapshot)
          {
      
          }
      
          @Override
          public void onChildMoved(DataSnapshot dataSnapshot, String s)
          {
      
          }
      
          @Override
          public void onCancelled(DatabaseError databaseError)
          {
           //empty  
          }
      };
      

      DataSnapshot 将为您提供数据列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 2019-01-16
        • 1970-01-01
        相关资源
        最近更新 更多