使用CloudFireStore和Android Studio实现搜索功能
我正在recyclerview中实现项目搜索。我正在使用Android studio和云Firestore。查找文章时,我遇到以下错误: 原因:io.grpc.StatusException:无效参数:Order by子句不能包含具有相等筛选器的字段 我怎么能不在使用CloudFireStore和Android Studio实现搜索功能,android,google-cloud-firestore,full-text-search,firebaseui,Android,Google Cloud Firestore,Full Text Search,Firebaseui,我正在recyclerview中实现项目搜索。我正在使用Android studio和云Firestore。查找文章时,我遇到以下错误: 原因:io.grpc.StatusException:无效参数:Order by子句不能包含具有相等筛选器的字段 我怎么能不在“ville”上执行orderBy?我不明白 我希望能够以这种方式取得成果。我真正想要的是列表已经从第一个字符的条目中过滤出来了。多谢各位 我的搜索框实际上是一个编辑文本 searchBox.addTextChangedListener
“ville”
上执行orderBy
?我不明白
我希望能够以这种方式取得成果。我真正想要的是列表已经从第一个字符的条目中过滤出来了。多谢各位
我的搜索框实际上是一个编辑文本
searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Query query = db.collection("RESTO_TABLE").orderBy("ville",Query.Direction.ASCENDING)
.whereGreaterThan("ville",s)
.whereLessThan("ville",s+"\uf8ff");
FirestoreRecyclerOptions<RestoModel> Options = new FirestoreRecyclerOptions.Builder<RestoModel>()
.setQuery(query,RestoModel.class)
.build();
villeAdapter = new VilleAdapter(Options);
villeAdapter.startListening();
recyclerView.setAdapter(villeAdapter);
}
@Override
public void afterTextChanged(Editable s) {
Query query = db.collection("RESTO_TABLE").orderBy("ville",Query.Direction.ASCENDING)
.whereGreaterThan("ville",s)
.whereLessThan("ville",s+"\uf8ff");
FirestoreRecyclerOptions<RestoModel> Options = new FirestoreRecyclerOptions.Builder<RestoModel>()
.setQuery(query,RestoModel.class)
.build();
villeAdapter = new VilleAdapter(Options);
villeAdapter.startListening();
recyclerView.setAdapter(villeAdapter);
}
});
searchBox.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
Query Query=db.collection(“RESTO_TABLE”).orderBy(“ville”,Query.Direction.升序)
.其中大于(“维尔”,s)
.whereLessThan(“ville”,s+“\uf8ff”);
FirestoreRecyclerOptions选项=新建FirestoreRecyclerOptions.Builder()
.setQuery(查询,RestoModel.class)
.build();
villeAdapter=新villeAdapter(选项);
Villedapter.startListening();
recyclerView.setAdapter(Villedapter);
}
@凌驾
公共无效后文本已更改(可编辑){
Query Query=db.collection(“RESTO_TABLE”).orderBy(“ville”,Query.Direction.升序)
.其中大于(“维尔”,s)
.whereLessThan(“ville”,s+“\uf8ff”);
FirestoreRecyclerOptions选项=新建FirestoreRecyclerOptions.Builder()
.setQuery(查询,RestoModel.class)
.build();
villeAdapter=新villeAdapter(选项);
Villedapter.startListening();
recyclerView.setAdapter(Villedapter);
}
});
跟踪去堆:
FireStore回收商:onError
com.google.firebase.firestore.FirebaseFirestoreException:无效的_参数:Order by子句不能包含具有相等筛选器的字段
位于com.google.firebase.firestore.util.util.exceptionFromStatus(util.java:117)
位于com.google.firebase.firestore.core.EventManager.onError(EventManager.java:166)
位于com.google.firebase.firestore.core.SyncEngine.removeAndCleanupTarget(SyncEngine.java:534)
位于com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(SyncEngine.java:418)
位于com.google.firebase.firestore.core.MemoryComponentProvider$RemoteStoreCallback.handleRejectedListen(MemoryComponentProvider.java:99)
位于com.google.firebase.firestore.remote.RemoteStore.processTargetError(RemoteStore.java:562)
位于com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(RemoteStore.java:446)
在com.google.firebase.firestore.remote.RemoteStore.access$100(RemoteStore.java:53)
在com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(RemoteStore.java:176)
位于com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:108)
位于com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:38)
在com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(AbstractStream.java:119)
位于com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(未知来源:4)
位于com.google.firebase.firestore.remote.AbstractStream$CloseGuardRunner.run(AbstractStream.java:67)
在com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(AbstractStream.java:110)上
位于com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(FirestoreChannel.java:125)
在io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658)
在io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643)
在io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
在io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
位于com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(AsyncQueue.java:229)
运行(Thread.java:764)
原因:io.grpc.StatusException:无效的_参数:Order by子句不能包含具有相等筛选器的字段
at io.grpc.Status.asException(Status.java:541)
位于com.google.firebase.firestore.util.util.exceptionFromStatus(util.java:115)
位于com.google.firebase.firestore.core.EventManager.onError(EventManager.java:166)
位于com.google.firebase.firestore.core.SyncEngine.removeAndCleanupTarget(SyncEngine.java:534)
位于com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(SyncEngine.java:418)
位于com.google.firebase.firestore.core.MemoryComponentProvider$RemoteStoreCallback.handleRejectedListen(MemoryComponentProvider.java:99)
位于com.google.firebase.firestore.remote.RemoteStore.processTargetError(RemoteStore.java:562)
位于com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(RemoteStore.java:446)
在com.google.firebase.firestore.remote.RemoteStore.access$100(RemoteStore.java:53)
在com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(RemoteStore.java:176)
位于com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:108)
在com.google.firebase.firestore.remote.WatchStream.onNe
db.collection("RESTO_TABLE")
.orderBy("ville")
.whereGreaterThanOrEqualTo("ville", s)
.whereLessThanOrEqualTo("ville", s + "\uf8ff")