我创建了一个有排行榜的应用程序。
排行榜由3个类别组成:排名靠前,分享最多,信息最多。
在每个类别(选项卡)中,都有一个recyclerview,它从每个类别中加载了25个结果 firestore
.
所发生的是,每次用户打开这个活动,它读取75个文件,这几乎是我试图避免它。
是否有任何方法,当用户第一次启动活动时,它将加载这75个文档,但如果他在5分钟后启动活动,例如,它将只显示与以前相同的结果,而不从中读取75个文档 firestore
再一次?
每个recyclerview的加载方式如下:
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager( getApplicationContext() );
rv_TopRank.setLayoutManager( mLayoutManager );
rv_TopRank.setItemAnimator( new DefaultItemAnimator() );
private void showTopRanked() {
usersID.clear();
usersName.clear();
usersResult.clear();
db.collectionGroup( "UserData" ).orderBy( "rank", Query.Direction.DESCENDING ).limit( AppConstants.LEADERBOARD_TO_LOAD ).get()
.addOnSuccessListener( queryDocumentSnapshots -> {
for (QueryDocumentSnapshot document : queryDocumentSnapshots) {
if (document != null) {
usersID.add( document.getId() );
usersName.add( document.getString( "username" ) );
usersResult.add( document.getDouble( "rank" ) );
}
}
leaderBoardAdapter = new LeaderBoardAdapter( usersID, usersName, usersResult, 0 );
rv_TopRank.setAdapter( leaderBoardAdapter );
leaderBoardAdapter.notifyDataSetChanged();
} );
}
谢谢您
2条答案
按热度按时间ruoxqz4g1#
一种选择是使用android的共享首选项在本地保存数据,并且只在您认为必要时更新数据,而不是每次打开应用程序时更新数据。
smdnsysy2#
您可以使用以下方法:
在
onCreate()
方法,从日历中读取日期并将其保存在sharedPreferences
作为上次更新的日期,然后检查当前日期是否不等于上次更新的日期,然后从firebase进行查询。像这样:
对不起,代码在Kotlin。只是给你个主意。