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

Я хотел бы знать, существует ли какой-либо обратный вызов или что-то, что может вызвать метод, когда изменяется дочерний элемент в Firebase database узле.

enter image description here

Например, этот узел «Пользователи», каждый пользователь сохраняет свой собственный UID и все свои данные.Я ищу метод, который будет срабатывать при изменении profilePic.

Я пробовал addChildEventListener, а также addValueEventListener, но ни один из них не работал.

Вот пример

refToUsers.getReference(Params.USERS).child(currentUser.getUid()).child(Params.PROFILEPIC).addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        Glide.with(getApplication()).load(s).apply(new RequestOptions()
                .placeholder(R.mipmap.ic_launcher))
                .into(cvNavUserProfile);
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

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

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

Другой метод

refToUsers.getReference(Params.USERS).child(currentUser.getUid()).child(Params.PROFILEPIC).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.d(TAG,"DataSnapshot: " + dataSnapshot.toString());
        String profilePic = null;

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

Ни один из этих методов не запускается при изменении profilePic.Есть ли способ решить это?например, обратный вызов или прослушиватель, которые будут срабатывать каждый раз, когда profilePic равен update/change?

Также метод может работать только тогда, когда пользователь находится в определенном действии?Может ли оно быть запущено, даже если пользователь не активен в методе?

Ответы [ 3 ]

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

Я не знаю, каковы значения ваших Params.USERS и Params.PROFILEPIC, но, пожалуйста, используйте мое решение ниже с жестко закодированными значениями:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String profilePic = dataSnapshot.child("profilePic").getValue(String.class);
        Log.d(TAG, profilePic);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Log errors
    }
};
uidRef.addValueEventListener(valueEventListener);

При добавлении прослушивателя события значения,Метод onDataChange() запускается каждый раз, когда происходит изменение свойства profilePic.

Также не игнорируйте ошибки.Как видите, я зарегистрировал их в методе onCancelled().

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

Нашли решение:

  refToUsers.getReference(Params.USERS).child(currentUser.getUid()).child(Params.PROFILEPIC).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String profilePic = dataSnapshot.getValue(String.class);
            Log.d(TAG,"DataSnapshot: " + dataSnapshot.toString());
            Log.d(TAG,"profile picture: " + profilePic);
            Glide.with(getApplication()).load(profilePic).apply(new RequestOptions()
                    .placeholder(R.mipmap.ic_launcher))
                    .into(cvNavUserProfile);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Работает отлично!

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

Используйте это query:

refToUsers.getReference("users").orderByChild().equalTo(currentUser.getUid()).child("profilePic").addChildEventListener(new ChildEventListener() {

  ...
  ..

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