Получить ссылку на базу данных Firebase в зависимости от конкретного параметра - Android Studio - PullRequest
0 голосов
/ 15 октября 2018

Я обычно получаю ссылку на мой tupla из базы данных firebase следующим образом:

private DatabaseReference needsRef;

public void onCreate(...) {
     ...
     needsRef = FirebaseDatabase.getInstance().getReference().child("favors");
}

Но теперь я хотел бы поместить внутрь "needsRef" только строки, содержащие заданный параметр, вызывающий "тип".Если (type == "need"), поместите эти строки в "needsRef", а если (type == "offer"), поместите их в другую ссылку на DatabaseReference под названием "offerRef".

I show a screenshot of my database to clarify the question

Ребенок после «favors» в базе данных - это имя, которое не всегда совпадает.I show the image

Не могли бы вы помочь мне, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы можете проверить значение, как показано ниже:

   ArrayList<DataClass> temp1 = new ArrayList<>();
   ArrayList<DataClass> temp2 = new ArrayList<>();
   @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
    {
        if(!temp1.isEmpty() && !temp2.isEmpty())
           temp1.clear();temp2.clear();         

        DataSnapshot dataSnapTemp = dataSnapshot.child("favors");
        for (DataSnapshot datasnap : dataSnapTemp.getChildren())
        {
            String type = datasnap.child("type").getValue().toString();
            if(type.equals("need")){
                temp1.add(your object)
            }else if(type.equals("need")){
                temp2.add(your object)
            }
        }
    }
0 голосов
/ 15 октября 2018

Похоже, вы хотите два запроса: один, который содержит только потребности, а другой, который содержит только предложения.Это легко сделать с помощью:

private Query needsQuery;
private Query offersQuery;

public void onCreate(...) {
     ...
     DatabaseReference favorsRef = FirebaseDatabase.getInstance().getReference().child("favors");
     needsQuery = favorsRef.orderByChild("type").equalTo("need");
     offersQuery = favorsRef.orderByChild("type").equalTo("offer");
}

Класс Query, который я здесь использую, является родительским классом DatabaseReference, поэтому он имеет много методов, которые вы уже знаете по работе со ссылками на базы данных, и можетиспользовать почти так же.

0 голосов
/ 15 октября 2018

Если вы добавите прослушиватель события в свой код (т. Е. Прослушиватель события значения), вы можете создать цикл for для циклического перебора дочерних элементов.В этом цикле вы затем проверяете использование операторов if на основе типа.

        DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {
            DataSnapshot needRef = dataSnapshot.child("favors");
            for (DataSnapshot snap : needRef.getChildren())
            {
                String type = snap.child("type").getValue().toString();

                //This then references the type you need. Just add children as you need to get to the needed node
                dataSnapshot.child(type)...;
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

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