Поиск значения в режиме реального времени по нажатию кнопки - PullRequest
0 голосов
/ 07 апреля 2020

Я искал, как это сделать, и большинство ответов ищут, фильтруя слова. Что я хотел, так это поиск по нажатию кнопки и отображение результатов по следующему действию. Вот как выглядит мой поиск:

enter image description here

Вот мой код:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_student;

    mbutton = (Button) findViewById(R.id.search_button);
    search = (EditText) findViewById(R.id.input_search);


    mbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDbref = FirebaseDatabase.getInstance().getReference();
            mchildref = mDbref.child("Students");
            Query query = mchildref.orderByChild("Name").equalTo(search);

            mchildref.child("Students").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    String value =dataSnapshot.getValue(String.class);
                    Intent search= new Intent(SearchStudentActivity.this, testing.class);
                    startActivity(search);

                }

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

                }
            });

Надеюсь узнать у вас, ребята, и спасибо.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_student;

    mbutton = (Button) findViewById(R.id.search_button);
    search = (EditText) findViewById(R.id.input_search);
    //Add a TextView here to set the text (optional, depends on how you want to show the retrieved data)
    String lastName;

    mbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        final String studentToSearch = search.getText().toString();

        myDbref = FirebaseDatabase.getInstance().getReference().child("Students").child(studentToSearch);
        myDbref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            try {
                lastName = dataSnapshot.child("last name").getValue().toString();
                lastNameTextView.setText(lastName);
            }catch (Throwable e){
                Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
            }
        }

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

        }
    });

Пожалуйста, попробуйте это так. Здесь я предположил, что у вас есть дочерний узел с именем «фамилия» внутри родительского узла, например Students >> studentToSearch >> last name. Просто замените что-нибудь вместо фамилии, чтобы получить другую информацию.

0 голосов
/ 07 апреля 2020

Одно решение для замены вашего addListenerForSingleValueEvent на ValueEventListener.

Присоединение ValueEventListener к списку данных вернет весь список данных в виде одного DataSnapshot, который затем вы можете l oop для доступа к отдельным детям.

        Query query = mchildref.orderByChild("Name").equalTo(search);

        query.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
              // TODO: handle the post, extract the values to pass to another activity
            }

            String value =dataSnapshot.getValue(String.class);
            Intent search= new Intent(SearchStudentActivity.this, testing.class);
            startActivity(search);
          }

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

          }
        });

//        mchildref.child("Students").addListenerForSingleValueEvent(new ValueEventListener() {
//          @Override
//          public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//            String value =dataSnapshot.getValue(String.class);
//            Intent search= new Intent(SearchStudentActivity.this, testing.class);
//            startActivity(search);
//
//          }

...