Поиск содержимого в базе данных Firebase Live - PullRequest
0 голосов
/ 29 марта 2019

Когда я ищу элементы в своей базе данных Firebase, я не получаю сообщение об ошибке, а вместо этого вообще ничего не вижу. При прохождении через отладчик значения, которые у меня есть в editText, устанавливаются фактически, и при поиске этих значений в Запросе они не отображаются:

final EditText t = (EditText) findViewById(R.id.DjNameET);

        mProfileDatabase = FirebaseDatabase.getInstance().getReference();

        t.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if(i == EditorInfo.IME_ACTION_SEARCH)
                {
                    searchData = t.getText().toString();


                    return true;
                }
                return false;
            }
        });

        ImageButton imgB= (ImageButton) findViewById(R.id.searchBtn);

        imgB.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view)
            {
                query = mProfileDatabase.child("djprofile").orderByChild("djName")
                        .startAt(searchData)
                        .endAt(searchData + "\uf8ff");

                FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
                        .setQuery(query, DjProfile.class)
                        .build();
                firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
                {

                    @NonNull
                    @Override
                    public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);

                        return new ResultsViewHolder(view);
                    }

                    @Override
                    protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
                        holder.setDjProfile(model);
                    }
                };
                firebaseRecyclerAdapter.startListening();
                recyclerView.setAdapter(firebaseRecyclerAdapter);
            }
        });

Вот как выглядит живая база данных:

enter image description here

В моем тексте редактирования, когда я ищу "DjRockSauce", в окне реселлера не отображаются результаты, я чувствую, что это потому, что я не получаю правильный путь в запросе, если это так, как мне правильно получить пути к файлам для поиска и отображения результатов?

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Если у вас есть проблема, подобная этой, правильный подход состоит в том, чтобы попытаться найти, где проблема, и , где она не .

Первым шагом было бы посмотреть, сможете ли вы показать нефильтрованные профили.

query = mProfileDatabase.child("djprofile");

Если это показывает все профили, вы знаете, что путь, который вы строите, является правильным.

Если это так, я бы попробовал использовать жестко запрограммированную строку поиска:

query = mProfileDatabase.child("djprofile").orderByChild("djName")
        .startAt("Dr")
        .endAt("Dr\uf8ff");

Если это тоже сработает, проблема в том, как вы получаете поисковый запрос, и вам следует изучить его.

0 голосов
/ 29 марта 2019

С помощью @Frank van Puffelen выяснилось, что моей проблемой было то, что я звонил searchText, а он возвращал ноль. Когда на самом деле мне нужно было передать текст физического имени EditText в поисковый запрос следующим образом:

            query = mProfileDatabase.child("djprofile").orderByChild("djName")
                    .startAt(t.getText().toString()).endAt(t.getText().toString() + "\uf8ff");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...