Поиск по SQLite через EditText

142
19 ноября 2017, 13:42

Вопрос наверное слишком общий, но на конкретном примере моего кода может подскажите кто. У меня есть DialogFragment:

final ListView mListHeads = headsView.findViewById(R.id.list_heads);
final EditText mSearchHead = headsView.findViewById(R.id.search_head);
final ViewPager mViewPager = getActivity().findViewById(R.id.container);
    // Открываем базу данных
    DBAssetHelper dbSetup = new DBAssetHelper(getActivity());
    db = dbSetup.getWritableDatabase();
    // Делаем запрос
    try {
        cursor = db.rawQuery("select * from " + "TABLE_QUESTION", null);
        // Создаем адаптер
        listAdapter = new SimpleCursorAdapter(
                getActivity(),
                R.layout.list_contents,
                cursor,
                new String[]{"QuestionNumber", "QuestionText"},
                new int[]{R.id.text_one, R.id.text_two},
                0);
        if(!mSearchHead.getText().toString().isEmpty())
            listAdapter.getFilter().filter(mSearchHead.getText().toString());
        // установка слушателя изменения текста
        mSearchHead.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}
            @Override
            public void afterTextChanged(Editable s) {
                listAdapter.getFilter().filter(s.toString());
            }
        });
        // Устанавливаем провайдер фильтрации
        listAdapter.setFilterQueryProvider(new FilterQueryProvider() {
            @Override
            public Cursor runQuery(CharSequence constraint) {
                if (constraint == null || constraint.length() == 0) {
                    return db.rawQuery("select * from " + "TABLE_QUESTION", null);
                }
                else {
                    return db.rawQuery("select * from " + "TABLE_QUESTION" + " where " +
                            "QuestionNumber" + "like ?", new String[]{"%" + constraint.toString() + "%"});
                }
            }
        });
        // Передаем адаптер нашему ListView
        mListHeads.setAdapter(listAdapter);
    } catch (Exception e) {
        // В случае исключения выводим тост сообщение
        Toast.makeText(getActivity(), "База данных недоступна", Toast.LENGTH_SHORT).show();
    }

Где "like ?" студия ругается, и предлагает добавить строку в String. Добавляю, а затем, в приложении пытаюсь произвести поиск но безрезультатно. Список глав отображается как положено, но если я вбиваю что-либо в EditText ничего не происходит. Что я сделал не так?

Answer 1

Мда, отсутствовал пробел:

return db.rawQuery("select * from " + "TABLE_QUESTION" + " where " +
                        "QuestionNumber " + "like ?", new String[]{"%" + constraint.toString() + "%"});

После QuestionNumber нужно было пробел поставить)

READ ALSO
Windows api documentation

Windows api documentation

Где можно найти документацию для создания приложений на java под винду? Пересмотрел много источниковНо не нашел ничего толкового

155
Не запускается Jar-файл

Не запускается Jar-файл

У меня новый ПК, ранее пользовался ноутбуком с семёркой, на компе десяткаСкачал JDK 8, установил, создал переменную JAVA_HOME и изменил переменную...

168
WPF не видит kласс в пространстве имен

WPF не видит kласс в пространстве имен

Ситуация такая : В проекте создал папку Converters и в нее добавил новый класс TagToImageSourceConverterВ Заголовке разметки добавил ссылку на эту папку вот...

351
Отображения изображения в ListView - C#

Отображения изображения в ListView - C#

Как отобразить изображения в ListView которые находятся в url?

206