繁体   English   中英

为什么在Android上使用fts3表的使用加载程序的listview为空?

[英]Why is listview that uses loaders empty with fts3 table on Android?

基本上,使用CursorLoader加载数据的列表视图在普通表中显示正常,但是一旦将表转换为fts3(以使用MATCH进行搜索),它便停止显示数据。

表声明:

 public static final String NOTES_SCHEMA="CREATE VIRTUAL TABLE "+TABLE_NAME+" USING fts3("+
            "_id INTEGER PRIMARY KEY"+COMMA+NOTE_TITLE+" TEXT"+COMMA+NOTE_TEXT+" TEXT"+COMMA+TRASH_STATUS+" INTEGER DEFAULT 0"+COMMA+TIME+" INTEGER"+");";

onCreateCursorLoader:

case LOADER_NOTELIST_ID:
           String[] projection = new String[]{NotesModel.NotesTable._ID, NotesModel.NotesTable.NOTE_TITLE, NotesModel.NotesTable.NOTE_TEXT,NotesModel.NotesTable.TIME,NotesModel.NotesTable.TRASH_STATUS};
            String sortOrder = NotesModel.NotesTable.TIME+ " DESC";
            String where = NotesModel.NotesTable.TRASH_STATUS+"=0";
            CursorLoader cursorLoader = new CursorLoader(getApplicationContext().getApplicationContext(), uri, projection, where, null , sortOrder
            );

            return cursorLoader;

我还注意到,当我删除where参数时,它起作用了(但我需要该参数)。

内容提供商:

 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    Cursor cursor;

    switch (uriMatcher.match(uri)) {
        case NOTES_LIST://display the whole list, for main activity
            qb.setTables(NotesModel.NotesTable.TABLE_NAME);//set table to be queried
           break;

        case NOTES_ITEM:
            qb.setTables(NotesModel.NotesTable.TABLE_NAME);
            qb.appendWhere(NotesModel.NotesTable._ID + " = "+ uri.getLastPathSegment());
            break;

        default:
            throw new IllegalArgumentException("Invalid URI: " + uri);
    }

    cursor = qb.query(db,projection,selection,selectionArgs,null,null,sortOrder);
    cursor.setNotificationUri(getContext().getContentResolver(), uri);//observer for loader
    return cursor;
}

任何意见或解决方案将不胜感激。

经过大量研究,我得出的结论是,由于参数的原因,fts3表仅不支持CursorLoader()query()

总体而言,fts3默认情况下不支持括号,并且我发现上述两个方法的选择参数在执行时自动位于括号内。 出于这个原因,我的列表视图为空,这就是为什么一旦除去where子句后,它就会再次起作用。 但是,我需要该选择参数,最终,在搜索互联网后,我没有解决此问题的实际解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM