我正在使用Firestore Recycler Adapter绑定到firestore中的大型集合的查询.
据我了解GitHub中的文档,Firestore Recycler Adapter使用.addSnapshotListener(),而不是.get()方法.
该系列有5,000个文件,其中我将限制为100个.
Query query = fsDB.collection("Users").document(user_id).collection("posts")
.orderBy("date_created).orderBy("topic").limit(100);
Run Code Online (Sandbox Code Playgroud)
现在,当我连接到Internet并且启用了脱机持久性时,此查询在调用onDataChanged()之前平均需要90秒.我认为这是因为回收者从设备上的内存或缓存中获取数据,然后在从网络获取数据之前对其进行排序(!).
因为,当禁用脱机持久性时,查询只需要2-3秒.
如何在启用脱机持久性的同时更快地使用此查询?或者是否有一种方法可以使侦听器在搜索内存/缓存之前访问网络索引?
就像是...
FirestoreRecyclerOptions<Reed> options = new FirestoreRecyclerOptions.Builder<>()
.setQuery(query, Reed.class)
.setFirst(FirebaseFirestore.getInstance fsDB);
Run Code Online (Sandbox Code Playgroud)
客户端的firestore索引不可用吗?
使用firestore 15.0.0,Android设备
我正在将用户手机中的联系人电子邮件列表与我的Firestore数据库中的用户电子邮件列表进行比较,然后创建新的"contactsInApp"列表.
首先,我从firestore数据库中获取整个用户集合.然后,对于每个用户,我创建一个forEach循环,检查我的电话联系人列表中的每个联系人是否匹配.如果匹配,则会创建一个新的"androidContactsInApp"列表.当有少量用户时它可以正常工作,但是当我用5,000个用户测试时,它需要更长的时间 - 大约30秒.我认为firestore应该很好地扩展,所以想知道我的代码是否有问题.
这是我的代码:
fsDB.collection("users")
.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
for (DocumentSnapshot document : documentSnapshots) {
String userEmail = document.get("email").toString();
for (UserInfoForRequest android_contact: arrayListAndroidContacts) {
String isEmailInDatabase = android_contact.getUserEmail();
String trimmedEmail = isEmailInDatabase.trim();
if (userEmail.equals(trimmedEmail)) {
String userID = document.getId();
UserInfoForRequest android_contact2 = new UserInfoForRequest();
android_contact2.setUserName(document.get("username").toString());
android_contact2.setUserEmail(userEmail);
android_contact2.setCurrentUID(currentUID);
android_contact2.setContactsUID(userID);
arrayListAndroidContactsInApp.add(android_contact2);
}
}
}
adapterWithApp.notifyDataSetChanged();
adapterNoApp.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
我也试过反转循环.这样做,我在我的电话联系人列表中获得每个联系人,并且我为每个电话联系人执行查询.这意味着我没有下载整个用户集合.这种方法要慢很多 - 慢得多.我认为这是因为我执行单独的个别查询.这是我的代码:
for (final UserInfoForRequest android_contact: arrayListAndroidContacts) {
String contactsEmail = android_contact.getUserEmail();
String trimmedEmail = contactsEmail.trim();
fsDB.collection("users").whereEqualTo("email", …Run Code Online (Sandbox Code Playgroud) 我注意到,Firestore Billing基于存储的数据,下载的数据以及读写操作的数量。
有没有一种方法可以查看正在调用的读取或写入操作的数量,希望可以按日进行跟踪?
据我所知,在“计费”部分中,它仅告诉我我要支付的读取操作的数量-但我对此没有任何详细信息。谢谢。
所以这就是事情 - 我的Android应用程序有一个node.js后端服务器.我正在使用Google Play结算库,并使用后端验证购买是否为Google文档推荐.
现在,有关此错误的所有其他答案似乎都是指一致的问题.
我的后端SOMETIMES验证,有时会将此作为错误返回,表明我的服务帐户实际上是链接的(如我的控制台中所示).
我尝试了两个不同的库,我有同样的问题.有时一个人会回复验证成功,而另一个人会说我的帐户没有关联.有时他们都是消极的,有时都是积极的.
这似乎不一致.
var platform = 'google';
var payment = {
receipt: purchaseToken, // always required ... this is google play purchaseToken
productId: subID, // my subscription sku id
packageName: 'com.xxxxxx', // my package name
keyObject: key, // my JSON file
subscription: true, // optional, if google play subscription
};
var promise2 = iap.verifyPayment(platform, payment, function (error, response) {
/* your code */
if (error) {
console.log('error with iap, ' , error);
return true;
} …Run Code Online (Sandbox Code Playgroud)