【问题标题】:Filtering data in a query Firestore?在查询 Firestore 中过滤数据?
【发布时间】:2025-12-29 00:15:12
【问题描述】:

所以我创建了一个 RecyclerView 并使用 Firestore 中的数据填充它,一切正常,但是当我尝试过滤某些字段时,我没有得到任何数据。我正在使用 FirebaseUI。因此,例如,当我按字段名称过滤时,它工作得非常好,如下所示:

CollectionReference ref  = db.collection("exercises");
        Query query = ref.whereEqualTo("name", "SQUAT");

但另一方面,如果这样做,它将不起作用:

CollectionReference ref  = db.collection("exercises");
        Query query = ref.whereEqualTo("type", "barbell");

这是我的完整代码:

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;

public class ExerciseFragment extends Fragment {

    private static final String TAG = "TAG";
    private RecyclerView mView;
    FirebaseFirestore db;
    private FirestoreRecyclerAdapter adapter;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_exercise, container, false);

        db = FirebaseFirestore.getInstance();
        mView = view.findViewById(R.id.recycler_view);




        //Query
        CollectionReference ref  = db.collection("exercises");
        Query query = ref.whereEqualTo("name", "SQUAT");


        //RecyclerOptions

        FirestoreRecyclerOptions<Exercises> options = new FirestoreRecyclerOptions.Builder<Exercises>()
                .setQuery(query, Exercises.class)
                .build();


        //Adapter
        adapter = new FirestoreRecyclerAdapter<Exercises, ExerciseViewHolder>(options) {
            @NonNull
            @Override
            public ExerciseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_list_layout, parent, false);
                return new ExerciseViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull ExerciseViewHolder holder, int position, @NonNull Exercises model) {




                    String uri = model.getImageurl();
                    Glide.with(holder.itemView.getContext()).load(uri).into(holder.imageView);
                    holder.list_name.setText(model.getName());
                    holder.list_desc.setText(model.getDesc());



            }
        };


        mView.setHasFixedSize(true);
        mView.setLayoutManager(new LinearLayoutManager(getContext()));
        mView.setAdapter(adapter);




        return view;
    }



    private class ExerciseViewHolder extends RecyclerView.ViewHolder {

        private ImageView imageView;
        private TextView list_name;
        private TextView list_desc;

        public ExerciseViewHolder(@NonNull View itemView) {
            super(itemView);

            imageView = itemView.findViewById(R.id.listImage);
            list_name = itemView.findViewById(R.id.listTittle);
            list_desc = itemView.findViewById(R.id.listSubtitle);
        }
    }

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

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

this is my db structure

【问题讨论】:

    标签: java android google-cloud-firestore firebaseui


    【解决方案1】:

    好吧,没关系,这是权限问题。

    【讨论】: