Android FireStore回收选项。当不需要索引时,查询需要索引错误。只有当我使用orderBy时
我正在使用Firestore数据库和FirebaseUI将结果加载到android kotlin中的回收器视图中。我正在经历一些奇怪的事情 我理解在不同字段上发出过多不同请求时出现的错误“查询需要索引”。但是,我知道您可以提出许多请求,其中包括一个请求orderBy。现在,当我自己提出这个请求时(不使用FirestoreRecyclerOptions)。我没有问题,而且效果很好 但是,当我将请求与FirestoreRecyclerOptions一起使用时,例如:Android FireStore回收选项。当不需要索引时,查询需要索引错误。只有当我使用orderBy时,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我正在使用Firestore数据库和FirebaseUI将结果加载到android kotlin中的回收器视图中。我正在经历一些奇怪的事情 我理解在不同字段上发出过多不同请求时出现的错误“查询需要索引”。但是,我知道您可以提出许多请求,其中包括一个请求orderBy。现在,当我自己提出这个请求时(不使用FirestoreRecyclerOptions)。我没有问题,而且效果很好 但是,当我将请求与FirestoreRecyclerOptions一起使用时,例如: var querySearch
var querySearch = FirebaseFirestore.getInstance()
.collection(DB_DEALS_COLLECTION).document(departureCountry.toString()).collection(DB_DEALS_SUB_COLLECTION)
.whereEqualTo(FILTER_FIELD_APR, true)
.whereEqualTo(FILTER_FIELD_AUG, true)
.whereEqualTo(FILTER_FIELD_DEC, true)
.orderBy(FILTER_FIELD_TIMESTAMP, Query.Direction.DESCENDING).limit(15)
val options = FirestoreRecyclerOptions.Builder<Deal>().setQuery(querySearch, Deal::class.java).build()
现在我不想让这些字段升序,只想让时间戳升序
注意:这仅在我包括以下内容时发生:
.orderBy(FILTER_FIELD_TIMESTAMP,
在控制台中,我还看到,limitType=LIMIT\u TO\u FIRST
。我还看到,-\uuuuu name\uuuuu
。这些是什么,我从来没有设置过
我希望我的问题是清楚的,我对这一切有点困惑
谢谢 如果您的查询确实需要索引,您应该能够通过覆盖
FirebaseRecyclerAdapter
轻松创建索引:
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<T, H>(options) {
// ...
@Override
public void onError(@NonNull FirebaseFirestoreException e) {
Log.w(TAG, "onError", e);
}
};
FirestoreRecyclerAdapter=新的FirestoreRecyclerAdapter(选项){
// ...
@凌驾
public void onError(@NonNull FirebaseFirestoreException e){
Log.w(标签“onError”,e);
}
};
然后在logcat中,您将看到完整的错误,其中包括一个链接,您可以单击该链接自动创建缺少的索引
至于你的其他问题:
- 您是否从同一设备创建数据?如果是这样的话,这就解释了为什么尽管出现了错误,您仍会在
中看到数据。它来自不使用索引的脱机缓存RecyclerView
是说.limit(15)
的一种不太冗长的方式。因此,您可以忽略.limitToFirst(15)
limitType=LIMIT\u TO\u FIRST
\uuuuuu name\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
FirebaseRecyclerAdapter
轻松创建索引:
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<T, H>(options) {
// ...
@Override
public void onError(@NonNull FirebaseFirestoreException e) {
Log.w(TAG, "onError", e);
}
};
FirestoreRecyclerAdapter=新的FirestoreRecyclerAdapter(选项){
// ...
@凌驾
public void onError(@NonNull FirebaseFirestoreException e){
Log.w(标签“onError”,e);
}
};
然后在logcat中,您将看到完整的错误,其中包括一个链接,您可以单击该链接自动创建缺少的索引
至于你的其他问题:
- 您是否从同一设备创建数据?如果是这样的话,这就解释了为什么尽管出现了错误,您仍会在
中看到数据。它来自不使用索引的脱机缓存RecyclerView
是说.limit(15)
的一种不太冗长的方式。因此,您可以忽略.limitToFirst(15)
limitType=LIMIT\u TO\u FIRST
\uuuuuu name\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu