java - Sql Like query for Firebase Database Reference with MaterialSearchBar

标签 java android firebase android-recyclerview searchbar

这是我想在产品中专门搜索的数据。关于:

"products": {
    "10001": {
        "about": "Marble Chowki pair with intricate floral Painting by Handicrafts Paradise",
        "category": "handicrafts",
        "contact_vendor": "09171430513",
        "images": {
            "1001": {
                "url": "https://firebasestorage.googleapis.com/v0/b/sarasmelaapp.appspot.com/o/products_images%2Fchowki.jpg?alt=media&token=a74bf78e-f5ad-410c-aa28-9cbcacf386c4"
            },
            "1002": {
                "url": "https://firebasestorage.googleapis.com/v0/b/sarasmelaapp.appspot.com/o/products_images%2Fchowki1.jpg?alt=media&token=f91b064f-98fa-4504-91ff-ef56b43ab1fc"
            }
        },
        "shop_location": "Stall No. 56, Saras Mela, Patna",
        "vendor_address": "Rajasthan Handicraft And Textiles, Opposite Dada Bari, amer, Sagar Rd, Devisinghpura, Rajasthan 302028"
    },
    "10002": {
        "about": "Generic ITOS365 Handmade Vintage Dummy Gramophone Only For Home Décor",
        "category": "handicrafts",
        "contact_vendor": "01412630837",
        "images": {
            "1001": {
                "url": "https://firebasestorage.googleapis.com/v0/b/sarasmelaapp.appspot.com/o/products_images%2Fgramophone.jpg?alt=media&token=8a5cb8a1-4786-4d1b-b5cc-1072de9331de"
            },
            "1002": {
                "url": "https://firebasestorage.googleapis.com/v0/b/sarasmelaapp.appspot.com/o/products_images%2Fgramophone1.jpg?alt=media&token=6992be5f-2153-4cc5-89ef-1e36850ae21f"
            }
        },
        "shop_location": "Stall No. 56, Saras Mela, Patna",
        "vendor_address": "Near Rmgarh Turn, Amber Road, Sanganeer, Amber Road, Jaipur, Rajasthan 302002"
    }
}

这是我正在使用的 MaterialSearchBar 的实现:

searchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
        @Override
        public void onSearchStateChanged(boolean enabled) {
            if(enabled) {
                GridAutoFitLayoutManager layoutManager = new GridAutoFitLayoutManager(view.getContext(), 300);
                categories.setLayoutManager(layoutManager);
                categories.setNestedScrollingEnabled(false);

                searchListRecyclerAdapter = new ProductsRecyclerAdapter(searchList, view.getContext()) ;
                categories.setAdapter(searchListRecyclerAdapter);

            } else {
                onButtonClicked(MaterialSearchBar.BUTTON_BACK) ;
            }
        }

        @Override
        public void onSearchConfirmed(CharSequence text) {
       //HERE IS THE COMPLICATION

            searchList = CategoryActivity.feed_data() ;
            searchListRecyclerAdapter = new ProductsRecyclerAdapter(searchList, view.getContext()) ;
            categories.setAdapter(searchListRecyclerAdapter);
        }

        @Override
        public void onButtonClicked(int buttonCode) {
            if(buttonCode == MaterialSearchBar.BUTTON_BACK) {
                categoriesRecyclerAdapter = new CategoriesRecyclerAdapter(categoryList, view.getContext());
                LinearLayoutManager verticalLayoutManager = new LinearLayoutManager
                        (view.getContext(), LinearLayoutManager.VERTICAL, false);
                categories.setLayoutManager(verticalLayoutManager);
                categories.setNestedScrollingEnabled(false);
                categories.setAdapter(categoriesRecyclerAdapter);
            }
        }
    });
}

我想以某种方式搜索 Firebase 数据库并填充 searchList 中的数据以创建布局。我不知道如何实现它。

这是activity source code

最佳答案

这是我最终必须解决的问题。由于我可以在性能上做出一些妥协,但我需要我的搜索结果是准确的,所以我对所有产品一个一个地使用了 for-each 循环,并搜索了我想要的每个字符串。

无论我需要哪个对象,我都将它们添加到 ArrayList 中,最后通过 feedData() 函数传递。

我知道这不是最好的解决方案,但我不得不即兴发挥,这在 firebase 中是不可能的,这是我所能达到的最佳结果。

关于java - Sql Like query for Firebase Database Reference with MaterialSearchBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47242907/

相关文章:

firebase - 在不同 "paths"处具有相同名称的 Firestore 集合上的索引

typescript - 类型 'accessToken' 上不存在属性 'AuthCredential'

java - 降低Java中数据结构的内存占用

java - 在线计算器或准确的公式来计算自 1970 年到给定日期的毫秒数?

android - com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay 的不满足依赖关系

android - 如何在操作栏上创建三个均匀分布的按钮

Android studio 注销 : clear saved preferences kotlin

java - 验证 IP 地址(带掩码)

java - JTextPane:setCharacterAttributes 的渲染器是什么?

java - Android:如何让后续例程等待ObjectAnimator?