我有一个使用 firebaserecycleradapter/view
在屏幕上显示数据的应用程序。工作得很好,但我有一个问题。当我发送突发新闻通知并且用户单击通知时,我的新闻应用程序将打开,但需要一段时间才能加载最新新闻。
我想在通知的onMessageReceived
中加载后台数据(也包含数据),以便当用户打开新闻 Activity 时,最新的新闻项已经可用。代码如下:
public void onMessageReceived(RemoteMessage remoteMessage) {
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
processData(remoteMessage);
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
}
private void processData(RemoteMessage rm){
// This is the exact same ref and query that is used by the firebaserecycleradapter
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("all_news");
Query q = ref.orderByChild("mStatus").equalTo(2).limitToLast(100);
q.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Nothing. The idea is just to read the data upfront so that fetch appears faster
Long count = dataSnapshot.getChildrenCount();
Log.d(TAG, "ProcessData Count" + count);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Nothing
}
});
}
ProcessData
被调用,onDataChanged
也被调用,所以我知道数据正在此处读取。但是当我打开应用程序并使用相同的数据库引用转到 Activity 时,该 Activity 似乎再次读取数据!为什么会发生这种情况?
最佳答案
经过更多研究后,我发现 addListenerForSingleValueEvent
是从缓存中读取的,而不是从 Firebase 服务器读取的,因为我设置了 FirebaseDatabase.getInstance().setPersistenceEnabled(true) ;
在我的应用程序类中。
我现在已删除整个 ProcessData
函数,而是在 Activity 中的 databasereference
路径上调用 KeepSynced(true)
。
该应用程序现在按我的预期运行。
感谢大家的回复。
关于android - 在后台从firebase数据库读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42918476/