我刚开始在我的数据库中存储usertokens以进行通知。除了使用某些usertoken字符串值之外,我没有问题存储和检索数据。但是,当我使用usertoken获取数据快照时,它返回null,但有时只是。
我的听众看起来像这样(只是一个普通的听众):
udRef.addListenerForSingleValueEvent(new ValueEventListener () {
@Override
public void onDataChange(DataSnapshot datasnapshot) {
User user = datasnapshot.get value(User.class);
//do something with data here
//eg. Log.e("ERR", String.value Of(user));
//returns "null" for SOME users only, keep reading.
}
@Override
public void onCancelled (DatabaseError databaseError) { ... }
});
当用户创建帐户时,它会自动插入如下所示的字符串标记:
"cL_AEuSZa1I:APA91bF9R-dDetqrSNMQMzAoHRmLOHXK2acK_zJLhFhZ5IhvNChPSx4P943GirVwsy5walc0RrvyGnMm49oLxNJ-uKsGRCELhJ-9kwnPmdHOyWJWz0Esm_Y0MB7BypNUuQ4qZQmoW5nO"
令牌用于使用FCM的推送通知。根据FB人员的建议自动刷新。上面的令牌无效,实际上这个usertoken让我的数据快照不起作用所以我不得不手动删除它!是的,立即删除它我能够捕获快照,它不再返回null。
我不知道我做错了什么,但是当我在数据库中的usertokens看(用我的眼睛,而不是脚本)时,我可以知道哪些会很麻烦。这是如何:
所有usertokens都太长了,所以Firebase的网络控制台会像这样缩短"gftgvdgGhbgfc_fggg..."
所有麻烦的令牌也被切断,但没有3点或关闭引号,它们看起来像"gftgvdgGhbgfc_fggg
但是在展开时它们是正常的,就像工作的那样(长度相同)。
我有30个用户,所以我可以很容易地完成所有这些:D
这是我的数据(大致)的样子:
"fhgfFghDfgghhfDDf" : {
"username" : "a_string_here"
"userPic" : "looong_string_link_to_fb_storage"
"usertoken" : "long_user_token_like the_one_in_question"
},...
我是否错误地存储了令牌?,我应该将它们转换为其他数据类型吗? FB中有太多'陷阱':(
请注意,我没有其他任何问题,除了usertokens使我的datasnapshot为null,所以代码中的任何错误只是打字错误(我从手机中输入我的笔记本电脑屏幕输入这个问题...不要问)