我想知道当Firebase database
节点中的子项发生更改时,是否存在某些回调或可以触发方法的东西。
例如,此“用户”节点,每个用户均由自己的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
时都会触发的回调或监听器?
该方法也仅在用户处于特定活动时才有效吗?即使用户不在该方法的活动中,也可以触发它吗?
答案 0 :(得分:0)
使用此query
:
refToUsers.getReference("users").orderByChild().equalTo(currentUser.getUid()).child("profilePic").addChildEventListener(new ChildEventListener() {
...
..
// and the rest of your listener
答案 1 :(得分:0)
我不知道您的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()
方法中。
答案 2 :(得分:0)
找到解决方案:
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) {
}
});
完美!