我想从存储在 firebase 数据库中的数据填充我的 recyclerview。我尝试在网上搜索,但大多数示例都具有简单的 json 树结构,我的 Json 数据库具有以下格式:
我的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/