java - 如何在 android studio 的 recyclerview 中从 firebase 数据库中检索数组列表?

标签 java android firebase-realtime-database

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

我的android代码如下:

模型类.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);
    }
}

在此 Activity 中,我应该如何从 firebase 数据库中检索“Category_name”?

最佳答案

<强>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 将为您提供数据列表

关于java - 如何在 android studio 的 recyclerview 中从 firebase 数据库中检索数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43138275/

相关文章:

java - Android 上的 TextView 在任一方向上仅显示两行文本

android - 一旦在 Firebase 中更改了子值,是否有任何方法可以防止 onCreate 调用?

swift - 如何在 swift 的注册页面中强制输入用户名

java - 在没有值的情况下向 HashMap 添加键?

java - 如何打印枚举名称而不是 Protocol Buffer 的 int 值(Java)

android - Xposed - 如何获取进程的包名

android - 如何将圆角蒙版创建为可绘制对象?

java - 我想删除 Firebase 数据库子项,但我不能

java - 如何向 Eclipse 中的现有 JUnit 添加测试?

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?