Получить данные в Firebase, используя другие данные - PullRequest
0 голосов
/ 08 ноября 2018

Это структура базы данных Firebase моего проекта.

Firebase Database of my project

Я хочу получить complaint division, describe, stat для конкретного имени хостела и roomno. Как получить эти данные и отобразить в проекте Android?

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Чтобы получить все эти значения, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference complaintsRef = rootRef.child("Complaints");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String complaintDivision = ds.child("complaintdivision").getValue(String.class);
            //Get the other properties in the same way
            Log.d(TAG, complaintDivision);
        }
    }

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

Вывод в вашем logcat будет:

Plumber Related
0 голосов
/ 08 ноября 2018

Таким образом, для извлечения данных вы должны сначала объявить объект Firebase DatabaseReference, который указывает на вашу базу данных:

private DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();

Затем вы бы написали запрос, используя этот объект:

Query query = mDatabase.child("Complaints"); 

Теперь вы прикрепляете SingleValueEventListener к этому запросу:

query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //Write a for-each loop to cycle through your node's children
            for(DataSnapshot data: dataSnapshot.getChildren()){
                //Create an instance of your model class to
                //store the received data

                //Make sure you have an empty constructor in your model class
                Complaint complaint = data.getValue(Complaint.class);

                //then simply call your getters on the complaint object
                //to get what you need
                complaint.getComplaintDivision();
                complaint.getDescription();
                //...
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Чтобы получить более конкретно, вы просто измените запрос. Для получения дополнительной информации о запросах, см. Это

0 голосов
/ 08 ноября 2018

Это базовая функция в Firebase на Android. Вы можете использовать ValueEventListeners со ссылкой на базу данных, чтобы сделать это. Шаги для достижения желаемых результатов могут быть зачислены, как показано ниже:

  1. Создание модели жалобы с теми же полями, что и в вашей базе данных.
  2. Получите правильную ссылку Firebase для вашего узла базы данных и добавьте экземпляр ValueEventListener для прослушивания изменений базы данных.
  3. Передайте DataSnapshot в класс Complaint и назначьте его объекту Complaint.
  4. Делайте, что хотите, с полученным объектом Complaint.

Создание класса жалоб:

class Complaint {
        // your fields should have the same name as database fields to prevent unnecessary complications
        public String complaintdivision;
        public String complaintid;
        public String describe;
        public String hostelname;
        public String roomno;
        public String stat;

        public Complaint(){// required for Firebase

        }
    }

Получение данных из Firebase:

ArrayList<Complaint> myComplaintArrayList = new ArrayList<>();
FirebaseDatabase.getInstance().getReference().child("Complaints").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot complaint: dataSnapshot.getChildren()){
            Complaint c = complaint.getValue(Complaint.class);
            myComplaintArrayList.add(c);// you should have an ArrayList<Complaint> for this loop
        }
        // do what you want with the items you obtained
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

Это почти все. Если у вас все еще есть проблемы, вам следует прочитать руководство по Firebase.

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