Как получить ключ узла из внутренних совпадающих значений - PullRequest
0 голосов
/ 09 декабря 2018

Мне нужно получить ключ каждого события, который соответствует идентификаторам пользователей, которые я зациклил раньше, в другой таблице, поэтому у меня есть эта таблица, в которой текущий идентификатор пользователя, вошедшего в систему, содержит список пользователей, который поможетопределенное событие

enter image description here

Я вошел как пользователь MUTzo13NuJRlbbkZCDp2nCdHkIn1, тогда я просто получаю всех пользователей ниже этого идентификатора, так что я знаю, какой из них япригласили

Я сделал это с этим

 mDatabase.child("userEvent").child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){

                    for(DataSnapshot snapshot1 : dataSnapshot.getChildren()){

                        final String users = snapshot1.getKey();

...

Итак, теперь в моей строке пользователей все пользователи из текущего вошли в один.

Теперь, так как ячтобы все те пользователи, которые входят в систему, вошли в одну, я хочу зациклить другую таблицу, найти подходящих пользователей и получить ключ (идентификатор события, в котором эти пользователи не помогли)

События таблицы

enter image description here

Мне нужно получить, например, идентификатор LT9d-sJCmMBUIW14AG8, если внутри него находятся пользователи, зацикленные ранее, поэтому я просто попробовал это

mDatabase.child("userEvent").child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){

                    for(DataSnapshot snapshot1 : dataSnapshot.getChildren()){

                        final String user = snapshot1.getKey();

                        //Now I go to the events table and try to get the event ID if those users are inside of them
                        mDatabase.child("events").addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                if(dataSnapshot.exists()){

                                  for(DataSnapshot snapshot2 : dataSnapshot.getChildren()){

                                    if(snapshot2.equals(user))
                                    Log.d(TAG, "onDataChange: "+snapshot2.getKey());

                                }
                                }
                            }

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

                            }
                        });

                    }

                }

            }

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

            }
        });

Но это не работает, вместо этого getKey возвращает имя узла события, а неИмя узла, которому принадлежит пользователь.

Любой совет?

РЕДАКТИРОВАТЬ:

Спасибо Петру за ответ, у меня проблема в том, что пользователи сопоставлены с событиями, которым они не принадлежат

enter image description here

Итак, проблема в том, что оно соответствует событиям пользователей, которым оно не принадлежит

1 Ответ

0 голосов
/ 09 декабря 2018

Попробуйте выполнить следующее:

mDatabase.child("events").orderByChild(user).addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
   if(dataSnapshot.exists()){
    for(DataSnapshot snapshot2 : dataSnapshot.getChildren()){
           String keys = snapshot2.getKey();
       }
    }
  }

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

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

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