【发布时间】:2020-06-12 14:08:16
【问题描述】:
我的 android 应用中有一些复选框。我想根据用户选中的复选框进行 Firestore 查询。我已经设法将所有选中字段的名称添加到一个数组中。 因此,如果我的应用程序有 10 个带有名称的复选框 - 项目 1,项目 2......项目 10,并且如果用户选中框 3,4 和 10。我得到一个数组:
testArray=[item 3,item 4,item 10]
现在我想根据布尔值-true 查询这个数组。我的数据库还包含具有不同布尔值的字段,即项目 1、项目 2......项目 10。
我试过了:
FirebaseFirestore.getInstance()
.collection("Users")
.whereEqualTo(testArray.toString(),true)
.get()
.addOnSuccessListener(
new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
List<DocumentSnapshot>
snapshotList=queryDocumentSnapshots.getDocuments();
for(DocumentSnapshot snapshot:snapshotList){
Log.d("TAG", "onSuccess: "+snapshot.getData());
}
}
}).addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}});
我得到了错误:
java.lang.IllegalArgumentException: Use FieldPath.of() for field names containing '~*/[]'.
at com.google.firebase.firestore.util.Preconditions.checkArgument(com.google.firebase:firebase-firestore@@21.4.3:117)
at com.google.firebase.firestore.FieldPath.fromDotSeparatedPath(com.google.firebase:firebase-firestore@@21.4.3:83)
at com.google.firebase.firestore.Query.whereEqualTo(com.google.firebase:firebase-firestore@@21.4.3:94)
at com.example.XX.todayQuestionFragment$1.onClick(todayQuestionFragment.java:134)
at android.view.View.performClick(View.java:7201)
at android.view.View.performClickInternal(View.java:7170)
at android.view.View.access$3500(View.java:806)
at android.view.View$PerformClick.run(View.java:27582)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
现在我尝试使用 IDE 推荐的 FieldPath.of()。即我替换了
testArray.toString()
与:
FieldPath.of(testArray)
使用它,我没有收到任何错误,但我也没有收到我的数据。我的 logcat 在调试部分是空的。
如何进行此查询?请记住,我不知道数组的内容或大小。这取决于用户输入。问题不是从复选框获取数组,而是查询字段是数组成员的位置。 任何见解都会非常有帮助
【问题讨论】:
标签: java android firebase google-cloud-firestore