因此,我的应用程序的一半依赖于Firestore。
有时,加载文档需要很长时间,例如5000ms
或更多。如果它是图像或其他东西也许我会理解,但它主要是字符串或Ints ......
关于如何改进这一点的任何想法?
由于
修改 db.collection(" usersAuth / $ {FirebaseAuth.getInstance()。uid !!} / KitLists")。get()。addOnSuccessListener {snapshot - >
for (document in snapshot.documents) {
val data = document
val kitName = data.id
firstKitList.add(kitName)
}
mainListViewAdapter.notifyDataSetChanged()
}
EDIT2
所以,我改编了它,但我在snapshot
上有一个未解决的错误。
db.collection("usersAuth/${FirebaseAuth.getInstance().uid!!}/KitLists").addSnapshotListener(object : EventListener<QuerySnapshot> {
override fun onEvent(@Nullable value: QuerySnapshot, @Nullable e: FirebaseFirestoreException?) {
if (e != null) {
Log.w("TAG", "Listen failed.", e)
return
}
for (document in snapshot.documents) {
val data = document
val kitName = data.id
firstKitList.add(kitName)
}
mainListViewAdapter.notifyDataSetChanged()
}
})
这是错误
答案 0 :(得分:2)
如果您使用get()
请求,则需要知道您正在尝试通过互联网读取数据。您无法将此与尝试读取SQLite数据库进行比较,该数据库本地存储在磁盘上。从Firebase服务器获取数据的速度取决于您的Internet连接速度以及您尝试获取的数据量。因此,等待5000ms
的原因很可能就是其中之一。如果原因是大量数据,请尝试优化您的查询或尝试将数据分成小部分。
如果我们说的是第一次尝试阅读文档,它可能比后续文件更慢,因为它必须启动互联网连接。我知道Firebase团队正在尝试提高性能,但在通过网络检索数据时,您不能指望0ms
。
您可以做的一件事是启用offline persistence
,这将为之前读取的数据创建本地chache。但get()
请求将首先检查Firebase服务器。如果您使用addSnapshotListener()
,您将能够立即从缓存中读取数据,而无需检查网络。
如果您想收听单个文档,请使用以下代码:
yourDocumentReference.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
if (snapshot != null && snapshot.exists()) {
Log.d(TAG, "Current data: " + snapshot.getData());
} else {
Log.d(TAG, "Current data: null");
}
}
});
如果您想收听集合中的多个文档,请使用以下代码:
yourCollectionReference.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
List<String> cities = new ArrayList<>();
for (DocumentSnapshot doc : value) {
if (doc.get("name") != null) {
cities.add(doc.getString("name"));
}
}
Log.d(TAG, "Current cites in CA: " + cities);
}
});