Android 什么';处理每次加载片段时不必从Firebase加载数据的最佳方法是什么?
首先,我使用的是Kotlin而不是Java,所以我希望解决方案使用Kotlin 我试图找出在片段第一次加载时从Firebase加载用户配置文件信息的最佳实践,但在后续加载时,不要查询Firebase并重新下载信息(数据持久性?)。我最初考虑使用SaveSharedReferences,但不确定这是否正确。我想我可以把这些信息存储在saveSharedPrefs和Firebase中,然后查询saveSharedPrefs是否为Android 什么';处理每次加载片段时不必从Firebase加载数据的最佳方法是什么?,android,firebase,firebase-realtime-database,kotlin,google-cloud-firestore,Android,Firebase,Firebase Realtime Database,Kotlin,Google Cloud Firestore,首先,我使用的是Kotlin而不是Java,所以我希望解决方案使用Kotlin 我试图找出在片段第一次加载时从Firebase加载用户配置文件信息的最佳实践,但在后续加载时,不要查询Firebase并重新下载信息(数据持久性?)。我最初考虑使用SaveSharedReferences,但不确定这是否正确。我想我可以把这些信息存储在saveSharedPrefs和Firebase中,然后查询saveSharedPrefs是否为null。但是,我还需要检查数据的变化。从逻辑上讲,如果用户更新了他们的
null
。但是,我还需要检查数据的变化。从逻辑上讲,如果用户更新了他们的配置文件,我会更新savesharedpref以及Firebase,因此只需要检查null。我正在考虑存储用户名、照片、电子邮件、个人简历、兴趣、城市、网站和可能的1或2个以上的项目,这样就不会有太多存储的本地数据。另外,我只会存储非敏感信息
这是处理数据的最佳和最有效的方法吗?还有别的方法我没有考虑吗?我还想将此应用于应用程序的其他部分,这样,除非来自Firebase的数据与本地数据不同,否则不要从Firebase重新加载,而是从saveSharedPrefs获取数据
请帮忙提建议。另外,我还没有对SaveSharedPref做太多的工作,所以我仍在学习如何做到这一点。谢谢
*****更新*****
从Firebase获取照片:
下面是我加载用户配置文件信息的代码(只是名称和照片uri):
为floatingActionButton
设置onClickListener
,并调用chooseProfileImage
方法从本地存储器获取图像:
view.fab_profile_photo_edit.setOnClickListener {
chooseProfileImage()
}
private fun chooseProfileImage() {
val intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(Intent.createChooser(intent, "Select Picture"), profileImageRequest)
}
这些操作都是在一个片段内执行的,仅供参考。如果您希望数据始终更新,您必须在每次重新加载片段时加载数据,但您认为用户对此不满意,这很好。我将在Android中使用SQlite,第一次加载数据并将其保存在数据库中。当我单击fragment(片段)时,我从数据库加载数据,以确保可以快速、始终地读取用户的数据,并从firebase加载数据,我检查加载完成后,将数据更新到sqlite,并重新加载数据以供查看 可能是这样的:
private loadDataFromFirebase(){
// Here load data from firebase, when load done, call bindaDataForView(data)
}
private bindDataForView(Data data){
}
我使用的是Firebase,不是SQL。Firebase使用Nosql。它不是真正的SQL,而是更像Json和SQL。但是,您不应该在每次加载片段时都加载用户信息,除非该数据发生更改(这在用户配置文件中并不常见。这不是用户感到不舒服的问题,而是应用程序速度的问题。或者,就这一点而言,您不应该在用户每次启动应用程序时都加载数据。您应该仅在信息发生变化时加载用户信息。这些数据应该在用户会话的整个过程中保持不变ess数据因某些原因而更改。SQLite要将数据保存为本地,在这里如果使用适配器,只需调用notifyDataSetChanged,我认为这是sipmple的情况。阅读更多信息:
private loadDataFromFirebase(){
// Here load data from firebase, when load done, call bindaDataForView(data)
}
private bindDataForView(Data data){
}