【发布时间】:2017-10-13 04:15:55
【问题描述】:
在我的应用程序中,我经常需要读取一次数据。我最初是为此使用 addListenerForSingleValueEvent() 方法开始的,但是我在使用此方法时遇到了问题,因为它在启用离线功能时无法按我的意愿工作(请参阅此处的问题:Firebase Offline Capabilities and addListenerForSingleValueEvent)
在上面的问题中提到了一种解决方法是使用 addValueEventListener() 方法,但是我不完全理解如何做到这一点(特别是当我完成获取所需的数据后如何删除 ValueEventListener) .
采用我在独立类中创建的方法来查询 Firebase 上存储用户 FCM 令牌的用户节点。似乎每次都没有从服务器返回最新令牌的问题。
public class SendFCMMessage {
String userToken;
String currentUser;
String userName;
ValueEventListener userListener;
public void sendMessage(final String contactNumber) {
final DatabaseReference ref = FirebaseDatabase.getInstance().getReferenceFromUrl(link).child("Users").child(contactNumber);
userListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
userToken = user.getToken();
// Send FCM Message after getting user token and then remove event listener
ref.removeEventListener(userListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("TAG", "Something terrible went wrong: " + databaseError);
}
};
ref.addValueEventListener(userListener);
}
}
如果我删除该行
ref.removeEventListener(userListener);
然后这段代码可以正常工作,但是我想知道如何在收到所需数据后立即删除 ValueEventListener?
谢谢, 回复
【问题讨论】:
标签: android firebase firebase-realtime-database