Java Android Firebase子节点侦听器

Java Android Firebase子节点侦听器,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想知道,当Firebase数据库节点中的子节点发生更改时,是否有回调或某些东西可以触发方法 例如,此“用户”节点,每个用户都由自己的UID和所有数据保存。 我正在寻找一种方法,当profilePic发生更改时,该方法将被触发 我尝试了addChildEventListener和addValueEventListener,但都没有成功 以下是示例 refToUsers.getReference(Params.USERS).child(currentUser.getUid()).child(Pa

我想知道,当
Firebase数据库
节点中的子节点发生更改时,是否有回调或某些东西可以触发方法

例如,此“用户”节点,每个用户都由自己的
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
更新/更改时触发的回调或侦听器


此外,该方法仅在用户进行特定活动时有效?即使用户不在该方法的活动中,也能触发该查询吗?

使用此
查询:

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

  ...
  ..

// and the rest of your listener

我不知道您的
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);
添加值事件侦听器时,每次对
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) {

        }
    });

工作完美

可能值得检查日志中与Firebase相关的内容。在设置侦听器之前,您是否已经进行了身份验证?似乎是我的答案中的精确解决方案,对吗?如果您认为我的答案对您有帮助,也可以帮助未来的访问者,请考虑通过点击投票箭头左侧的复选标记来接受它。应该把颜色改成绿色。我会很感激的。谢谢