Android Firebase 子节点侦听器

我想知道当Firebase database节点中的孩子发生变化时是否有一些回调或可以触发方法的东西。

http://img1.mukewang.com/616fd09a000114b504970494.jpg

比如这个“Users”节点,每个用户都保存了他自己的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?


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


凤凰求蛊
浏览 136回答 3
3回答

幕布斯7119047

我不知道你的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()方法中。

ITMISS

找到了解决办法:  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) {        }    });工作完美!

qq_笑_17

使用这个query:refToUsers.getReference("users").orderByChild().equalTo(currentUser.getUid()).child("profilePic").addChildEventListener(new ChildEventListener() {  ...  ..// and the rest of your listener
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java