繁体   English   中英

Android Firebase子节点侦听器

[英]Android Firebase child node listener

我想知道在Firebase database节点中的子项发生更改时是否存在某些回调或某些可以触发方法的方法。

在此处输入图片说明

例如,此“用户”节点,每个用户都用自己的UID和所有数据保存。 我正在寻找一个将在profilePic更改时触发的方法。

我已经尝试过addChildEventListeneraddValueEventListener但是它们都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时都会触发的回调或侦听器?

此外,该方法仅在用户处于特定活动时才可以使用吗? 即使用户不在该方法的活动中,也可以触发它吗?

使用此query

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

  ...
  ..

// and the rest of your listener

我不知道您的Params.USERSParams.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);

添加值事件侦听器时,每次profilePic属性发生更改时,都会触发onDataChange()方法。

也不要忽略错误。 如您所见,我已将它们记录在onCancelled()方法中。

找到了解决方案:

  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) {

        }
    });

完美的作品!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM