我一直致力于开发Android应用程序,该应用程序从Firebase实时数据库中提取数据并使用信息填充RecyclerView。它会更新,直到设备进入休眠模式。当它从打盹模式唤醒时,信息不会重新加载。我必须强制关闭应用程序并重新打开它以获取最新信息,因为设备进入了打盹模式。
我添加了一个“拉动刷新”,尝试强制重新加载数据,但它似乎只是从Firebase设备上的(过时的)缓存中提取。
以下是我在片段中使用的函数来加载来自Firebase的信息
public void loadTweetsFromFirebase() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference tweetsRef = database.getReference("rumourTweets");
Query query = tweetsRef.limitToFirst(100).orderByChild("timestamp");
query.keepSynced(true);
if (listener != null) {
tweetsRef.removeEventListener(listener);
}
tweets.clear();
adapter.notifyDataSetChanged();
listener = query.addValueEventListener(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot obj:
dataSnapshot.getChildren()) {
Tweet tweet = obj.getValue(Tweet.class);
// The keys are the tweet ids for the initial tweet, so we need to re-construct one with the obj key as the tweet id
Tweet newTweet = new Tweet(tweet.getCategory(), tweet.getProfileImgURL(), tweet.getTagName(), tweet.getText(), tweet.getTimestamp(), tweet.getUserId(), tweet.getUserName(), obj.getKey(), tweet.getRetweetedTweet(), tweet.getQuotedTweet());
tweets.add(newTweet);
adapter.notifyItemInserted(tweets.indexOf(newTweet));
}
refreshLayout.setRefreshing(false);
progressBarLayout.setVisibility(View.GONE);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("FB", "getUser:onCancelled", databaseError.toException());
}
});
}