0

I'm creating an application that can search data using edit text and ImageButton and the result will be posted on my RecyclerView. I can already search the "fullName" This is my database

But what I want is to search also the "dDate" and "bDate".

HERE IS MY CODE:

public class SearchActivity extends AppCompatActivity {

    private RecyclerView mPerson;
    private ImageButton mButton;
    private EditText mFindField;
    private DatabaseReference mDatabase;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);

        //Database Access//
        mDatabase = FirebaseDatabase.getInstance().getReference().child("person");

        //Recycler View//
        mPerson = (RecyclerView)findViewById(R.id.person_list);
        mPerson.setHasFixedSize(true);
        mPerson.setLayoutManager(new LinearLayoutManager(this));

        mButton = (ImageButton) findViewById(R.id.search_button);
        mFindField = (EditText) findViewById(R.id.search_field);

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String searchText = mFindField.getText().toString();
                onStart(searchText);
            }
        });
    }

    //Recycler Adapter//
    protected void onStart(String searchText){
        super.onStart();
        Query firebaseSearch = mDatabase.orderByChild("fullName").startAt(searchText).endAt(searchText + "\\uf8ff");
        FirebaseRecyclerAdapter<PersonInfo, PersonViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<PersonInfo, PersonViewHolder>(
                PersonInfo.class,
                R.layout.recyclerview_adapter,
                PersonViewHolder.class,
                firebaseSearch

        //View Person Info//
        ) {
            @Override
            protected void populateViewHolder(PersonViewHolder viewHolder, PersonInfo model, int position) {
                final String key = getRef(position).getKey();

                viewHolder.setName(model.getFullName());
                viewHolder.setdDate(model.getdDate());

                viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent showInfo = new Intent(SearchActivity.this, person_information.class);
                        showInfo.putExtra("Details", key);
                        startActivity(showInfo);
                    }
                });
            }
        };

        mPerson.setAdapter(firebaseRecyclerAdapter);
    }

    public  static class PersonViewHolder extends RecyclerView.ViewHolder{

        View mView;

        public PersonViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }
        public  void setName(String full){
            TextView FullName = (TextView) mView.findViewById(R.id.fName);
            FullName.setText(full);
        }
        public  void setdDate(String dDate){
            TextView Ddate = (TextView) mView.findViewById(R.id.dDate);
            Ddate.setText(dDate);
        }
    }
}

How can i search multiple child? Or How can I add more orderByChild?

  • 2
    you cannot search multiple childs. `orderByChild("fullName").startAt(searchText).endAt(searchText + "\\uf8ff");` this is correct but you cannot add two orderBychild(..) thats not possible – Peter Haddad Feb 11 '18 at 13:51
  • Firebase Database queries can only order/filter on a single property. In many cases it is possible to combine the values you want to filter on into a single (synthetic) property. For an example of this and other approaches, see my answer here: http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase – Frank van Puffelen Feb 11 '18 at 15:31

0 Answers0