Android Firebase Query для нескольких значений - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу получить все идентификаторы доктора, чья категория "ab c" (пример), а затем сохранить полученные идентификаторы в список массивов. Я хочу получить те же результаты, что и в следующем запросе sql:
select uid from doctors where category = "abc";

structure

Код для следующего действия записан ниже

private void loadDoctors() {

    ArrayList<String> uid = getIntent().getStringArrayListExtra("doctor_list");

    for (int i =0;i<uid.size();i++){
        DatabaseReference doctors = FirebaseDatabase.getInstance().getReference("Doctors").child(uid.get(i));
        Adapter = new FirebaseRecyclerAdapter<DoctorModel, DoctorViewHolder>(
                DoctorModel.class,
                R.layout.doctors_home,
                DoctorViewHolder.class,
                doctors
        ) {
            @Override
            protected void populateViewHolder(final DoctorViewHolder viewHolder, final DoctorModel model, int position) {
                viewHolder.doctor_name.setText(model.getName());

                Glide.with(Doctors.this).load(model.getProfileimage()).into(viewHolder.doctor_image);

                viewHolder.qualification.setText(model.getQualification());

                viewHolder.rating.setText(model.getRating());

            }

        };
        Adapter.notifyDataSetChanged();
        doctors_list.setAdapter(Adapter);
    }

1 Ответ

0 голосов
/ 02 апреля 2020

Чтобы решить эту проблему, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference doctorsRef = rootRef.child("Doctors");
Query categoryQuery = doctorsRef.orderByChild("category").equalTo("Cardiology");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> uidList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();
            uidList.add(uid);
        }

        //Do what you need to do with your list
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
categoryQuery.addListenerForSingleValueEvent(valueEventListener);

В конце у вас будет полный список идентификаторов. Еще одна вещь, которую стоит отметить, поскольку Firebease API является асинхронным, вы сможете использовать этот список только внутри метода onDataChange().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...