0

I want to search items by their names using Material SearchBar Android Github, also I want that when I search only "bihari" it give me food item of "Bihari Boti" its means it should not case sensitive.

Please help me and guide me how can I search any item by using their name.

Here is my Items.class (model class) :

public class Items {
    String name, desc,image, category;
    int price;
    boolean pin;


    public Items(String name, String desc, String image, String category, int price, boolean pin) {
        this.name = name;
        this.desc = desc;
        this.image = image;
        this.category = category;
        this.price = price;
        this.pin = pin;
    }

    public Items() {
    }

    public boolean isPin() {
        return pin;
    }

    public void setPin(boolean pin) {
        this.pin = pin;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

this is my search bar code :

binding.searchBar.setOnSearchActionListener(new SimpleOnSearchActionListener() {
            @Override
            public void onSearchStateChanged(boolean enabled) {
                super.onSearchStateChanged(enabled);
            }

            @Override
            public void onSearchConfirmed(CharSequence text) {
                super.onSearchConfirmed(text);
                Intent intent = new Intent(MainActivity.this,SearchActivity.class);
                intent.putExtra("query",text.toString());
                startActivity(intent);
            }

            @Override
            public void onButtonClicked(int buttonCode) {
                super.onButtonClicked(buttonCode);
            }
        });

this is my database code :

list = new ArrayList<>();
        binding.searchRecView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new PinAdapter(this, list);
        binding.searchRecView.setAdapter(adapter);
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("admin");
        Query search = reference.orderByChild("name").startAt(query).endAt(query+"\uf8ff");
        search.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                list.getClass();
                for (DataSnapshot categorySnapshot : snapshot.getChildren()) {
                    for (DataSnapshot itemSnapshot : categorySnapshot.getChildren()) {
                        Items items = itemSnapshot.getValue(Items.class);
                        list.add(items);
                    }
                }
                adapter.notifyDataSetChanged();
                Toast.makeText(SearchActivity.this, list.toString(), Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

Data base image : firebase database data

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
  • If you consider at some point in time trying to use [Cloud Firestore](https://firebase.google.com/docs/firestore/), then I think that this [resource](https://medium.com/firebase-tips-tricks/how-to-filter-firestore-data-cheaper-705f5efec444) will help. – Alex Mamo Oct 09 '22 at 10:23

0 Answers0