java - 如何在 FirebaseRecyclerAdapter 中设置 orderbychild?

标签 java android firebase firebase-realtime-database

我正在创建一个电话目录应用程序,我想在不同的 Activity 中显示不同的类别数据。我想帮助人们在不同类别中轻松找到他们的信息 它向我显示了数据库中的所有数据。但我不想只显示“救护车联系人”类别数据。

package com.example.moulvibazarinfo.allCatagory;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.example.moulvibazarinfo.AllAdapters.DataSetFire;
import com.example.moulvibazarinfo.AllAdapters.DetailsViewActivity;
import com.example.moulvibazarinfo.AllAdapters.FirebaseViewHolder;
import com.example.moulvibazarinfo.AllAdapters.SubmitedContact;
import com.example.moulvibazarinfo.R;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;

public class AmbulanceActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private ArrayList<DataSetFire> arrayList;
    private FirebaseRecyclerOptions<DataSetFire> options;
    private FirebaseRecyclerAdapter<DataSetFire, FirebaseViewHolder> adapter;
    private DatabaseReference databaseReference;

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ambulance);

        recyclerView = findViewById(R.id.ambulanceRecycleListViewID);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        arrayList = new ArrayList<DataSetFire>();
        databaseReference = FirebaseDatabase.getInstance().getReference().child("MiContact");
        databaseReference.keepSynced(true);




        options = new FirebaseRecyclerOptions.Builder<DataSetFire>().setQuery(databaseReference, DataSetFire.class).build();


        adapter = new FirebaseRecyclerAdapter<DataSetFire, FirebaseViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final FirebaseViewHolder holder, int position, @NonNull final DataSetFire model) {

            //filtering database




                holder.nameTextView.setText("name: "+model.getName());
                holder.institutionNameTextView.setText("institution Name: "+model.getInstitutionName());
                holder.emailTextView.setText("Email: "+model.getEmail());
                holder.numberTextView.setText("Number: "+model.getNumber());
                holder.categoryTextView.setText("category: "+model.getCategory());
                holder.addressTextView.setText("address: "+model.getAddress());


                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(AmbulanceActivity.this,DetailsViewActivity.class);
                        intent.putExtra("name",model.getName());
                        intent.putExtra("institutionName",model.getInstitutionName());
                        intent.putExtra("email",model.getEmail());
                        intent.putExtra("number",model.getNumber());
                        intent.putExtra("category",model.getCategory());
                        intent.putExtra("address",model.getCategory());
                        startActivity(intent);
                    }
                });

            }

            @NonNull
            @Override
            public FirebaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                return new FirebaseViewHolder(LayoutInflater.from(AmbulanceActivity.this).inflate(R.layout.row, parent, false));
            }
        };


        recyclerView.setAdapter(adapter);
    }

}

请有人帮助我!我是java新手。

最佳答案

要对 Firebase 实时数据库中的数据进行排序,您可以使用其 orderByChild() 方法:

databaseReference = FirebaseDatabase.getInstance().getReference().child("MiContact");
Query query = databaseReference.orderByChild("category");

options = new FirebaseRecyclerOptions.Builder<DataSetFire>().setQuery(query, DataSetFire.class).build();

这假设该属性在 JSON 中称为 category。如果它有不同的名称,请更新 orderByChild(...) 调用。

其余代码可以保持不变。通过这个简单的更改,数据库服务器、Firebase SDK 和 FirebaseUI 适配器将协同工作,按请求的顺序显示联系人。

<小时/>

编辑:如果您想过滤为仅显示 category 等于 Ambulance 的项目,您可以通过更改查询来实现,例如这个:

Query query = databaseReference.orderByChild("category").equalTo("Ambulance");
<小时/>

我强烈建议您查看 ordering and filtering data 上的 Firebase 文档,也许还有 codelab for Android developers .

关于java - 如何在 FirebaseRecyclerAdapter 中设置 orderbychild?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59349224/

相关文章:

java - 为多个子节点设置值 Firebase

android - 如何正确地从 Firebase 实时数据库中检索值?

android - 如何模拟 BluetoothAdapter.ACTION_REQUEST_ENABLE

android - 确定 Assets 文件夹中文件的文件类型

javascript - Firebase 云函数抛出关于 "timestampsInSnapshots"的警告

java - 永久删除 ListView 项 Onclick

android图表库--androidplot onclick问题

java - 代码在模拟器中崩溃,不知道为什么。 android/java 开发新手

java - log4j2 和 ch.qos.logback.core.PropertyDefinerBase

java - ServerSocket 无法读取客户端的输入