Как получить все данные через начальную букву искомого слова в sqlite android? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть строка поиска.Например: если я набираю co, мне нужно получить всю начальную букву набранного c и отобразить список.

Но он отображает только точный список ca.Как отобразить только начальную букву алфавита из входной строки.

в приведенном ниже запросе «Текст отображения» - это таблица, в которой отображается описание данного ввода.

public List<BaseTableOfContents> searchNodesForText(@Nullable String rootHash,
                                                            @Nullable String substring) {
        List<BaseTableOfContentsNode> returnValue = null;
        if (StringUtils.isNotEmpty(substring) && StringUtils.isNotEmpty(rootHash)) {
            String likeQuery = "%" + substring + "%";
            Cursor cursor = mDatabase.query(Tables.TOC_NODES, null,
                                            Columns.TOC_ROOT_NODE_HASH + " = ? AND (" +
                                            Columns.DISPLAY_TEXT + " LIKE ? OR " +
                                            Columns.TOC_IS_TITLE_BREAK + " = 1)",
                                            new String[] { rootHash, likeQuery }, null, null,
                                            Columns.TOC_SORT_ORDER + ORDER_ASCENDING);

            returnValue = getNodesFromCursor(cursor);
            cursor.close();
        }

Нижеявляется жестко закодированным.Вы можете увидеть текст «компенсации», который жестко закодирован.Но если я наберу компенсатор, он должен перечислить весь список, начинающийся с "c"

public List<BaseTableOfContents> searchNodesForText(@Nullable String rootHash,
                                                            @Nullable String substring) {
        List<BaseTableOfContentsNode> returnValue = null;
        if (StringUtils.isNotEmpty(substring) && StringUtils.isNotEmpty(rootHash)) {
            String likeQuery = "%" + "compensacion" + "%"; //here I hardcoded. Only when I give exact term, it's displaying, otherwise it's not displaying.
            Cursor cursor = mDatabase.query(Tables.TOC_NODES, null,
                                            Columns.TOC_ROOT_NODE_HASH + " = ? AND (" +
                                            Columns.DISPLAY_TEXT + " LIKE ? OR " +
                                            Columns.TOC_IS_TITLE_BREAK + " = 1)",
                                            new String[] { rootHash, likeQuery }, null, null,
                                            Columns.TOC_SORT_ORDER + ORDER_ASCENDING);

            returnValue = getNodesFromCursor(cursor);
            cursor.close();
        }

1 Ответ

0 голосов
/ 24 октября 2018

используйте это

public List<BaseTableOfContents> searchNodesForText(@Nullable String rootHash,
                                                            @Nullable String substring) {
        List<BaseTableOfContentsNode> returnValue = null;
        if (StringUtils.isNotEmpty(substring) && StringUtils.isNotEmpty(rootHash)) {
            String likeQuery = "%" + substring.indexOf(0) + "%";
            Cursor cursor = mDatabase.query(Tables.TOC_NODES, null,
                                            Columns.TOC_ROOT_NODE_HASH + " = ? AND (" +
                                            Columns.DISPLAY_TEXT + " LIKE ? OR " +
                                            Columns.TOC_IS_TITLE_BREAK + " = 1)",
                                            new String[] { rootHash, likeQuery }, null, null,
                                            Columns.TOC_SORT_ORDER + ORDER_ASCENDING);

            returnValue = getNodesFromCursor(cursor);
            cursor.close();
        }

substring.indexOf(0) взять первый символ вашего текста и показать все данные, которые начинаются с этой буквы.

...