Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按小写搜索Firebase文本?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何按小写搜索Firebase文本?

Java 如何按小写搜索Firebase文本?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在为我的Android应用程序使用Firebase数据库。我在应用程序中实现了搜索功能。在我的数据库中,只有当我开始用大写字母A搜索时,才会显示以A开头的每个标题。当我输入小写字母A时,它显示未找到任何结果。我想启用搜索小写变化也。请帮帮我。非常感谢。这是我的搜索码 private void firebaseUserSearch(String searchText) { Toast.makeText(Idioms.this, "Started Search", Toast.

我正在为我的Android应用程序使用Firebase数据库。我在应用程序中实现了搜索功能。在我的数据库中,只有当我开始用大写字母A搜索时,才会显示以A开头的每个标题。当我输入小写字母A时,它显示未找到任何结果。我想启用搜索小写变化也。请帮帮我。非常感谢。这是我的搜索码

    private void firebaseUserSearch(String searchText) {

    Toast.makeText(Idioms.this, "Started Search", Toast.LENGTH_LONG).show();

    Query firebaseSearchQuery = mUserDatabase.orderByChild("Title").startAt(searchText).endAt(searchText + "\uf8ff");

    FirebaseRecyclerAdapter<Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(

            Blog.class,
            R.layout.bank_row,
            BlogViewHolder.class,
            firebaseSearchQuery
    ) {
        @Override
        protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {

            viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getDescription(), model.getExample());
        }
    };
    mResultList.setAdapter(firebaseRecyclerAdapter);
}

有两种方法可以解决这个问题。第一种方法是使用toLowerCase方法从一开始就将项目名称以小写形式存储在数据库中。所以如果你想用小写来搜索名字,那就很好了。然后,如果要在活动中显示名称,并且希望首字母大写,则只需使用以下代码行:

String firstLetterCapital = lowerCaseItemName.substring(0, 1).toUpperCase() + lowerCaseItemName.substring(1);
因此,如果您有一个名为item的项目,使用上述代码,结果将是:item

第二种方法是将项目的小写名称存储为项目的属性,如下所示:

Firebase-root
    |
    --- items
          |
          --- ItemIdOne
                |
                --- itemName: Item
                |
                --- itemToLowerCase: item
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference itemsRef = rootRef.child("items");
Query query = itemsRef.orderByChild("itemToLowerCase").startAt(itemName.toLowerCase());
然后,要创建搜索,可以使用如下所示的查询:

Firebase-root
    |
    --- items
          |
          --- ItemIdOne
                |
                --- itemName: Item
                |
                --- itemToLowerCase: item
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference itemsRef = rootRef.child("items");
Query query = itemsRef.orderByChild("itemToLowerCase").startAt(itemName.toLowerCase());

我链接的问题是关于Javascript的,但在这种情况下,android也是如此。你在搜索文本中尝试过小写吗?是的,我只是在startAt中尝试过小写。但结果是一样的。如果你是用大写字母存储数据,那么就根据大写字母进行搜索。因为firebase不提供equalIgnoreCase方法。请检查上面的问题兄弟,我也有这个问题,是否仍有进行无案例搜索的方法sensitive@MadhanMohan请参阅Jay对您的问题的评论。这真的很有帮助。