Почему childEventListener не работает? - PullRequest
0 голосов
/ 31 августа 2018

Код для использования childEventListener выглядит следующим образом:

DatabaseReference TUidRef = usersRef.child(td);
            Log.i("hello",td);

            TUidRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                ms = dataSnapshot.child("rec_msg").getValue(String.class);
                fUid = dataSnapshot.child("fromUID").getValue(String.class);
                st = dataSnapshot.child("rec_secret").getValue(String.class);

                int km = 0;
                try {
                    km = Integer.parseInt(st);
                }
                catch (NumberFormatException e) {
                    Log.d("NumberError:", "Can't convert");
                }

                if(ms!=null && !ms.equals(""))
                    addMessageBox(ms,km);
                else
                    Toast.makeText(Main5Activity.this,"Something went wrong",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                ms = dataSnapshot.child("rec_msg").getValue(String.class);
                fUid = dataSnapshot.child("fromUID").getValue(String.class);
                st = dataSnapshot.child("rec_secret").getValue(String.class);

                int km = 0;
                try {
                    km = Integer.parseInt(st);
                }
                catch (NumberFormatException e) {
                    Log.d("NumberError:", "Can't convert");
                }


                if(ms!=null && !ms.equals(""))
                    addMessageBox(ms,km);
                else
                    Toast.makeText(Main5Activity.this,"Something went wrong",Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                if(mAuth.getUid().equals(fUid))
                    Toast.makeText(Main5Activity.this,"You left the conversation", Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(Main5Activity.this,"User left the conversation", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

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

            }
        });

usersRef определяется как:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference usersRef = rootRef.child("users");

Странно то, что он работает, когда я присоединяю childEventListener к usersRef, но логически мне нужно слушать изменения, относящиеся только к переменной td.

Значение td - это uid ребенка, которого необходимо выслушать.

База данных выглядит так: database

1 Ответ

0 голосов
/ 31 августа 2018

В этом случае вы должны использовать ValueEventListener, который одновременно прослушивает один узел. Код довольно похож:

DatabaseReference TUidRef = usersRef.child(td);

TUidRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        ms = dataSnapshot.child("rec_msg").getValue(String.class);
        fUid = dataSnapshot.child("fromUID").getValue(String.class);
        st = dataSnapshot.child("rec_secret").getValue(String.class);

        int km = 0;
        try {
            km = Integer.parseInt(st);
        }
        catch (NumberFormatException e) {
            Log.d("NumberError:", "Can't convert");
        }

        if(ms!=null && !ms.equals(""))
            addMessageBox(ms,km);
        else
            Toast.makeText(Main5Activity.this,"Something went wrong",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...