Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Android上使用加载程序和fts3表的listview是空的?_Java_Android_Sql_Sqlite_Listview - Fatal编程技术网

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

Java 为什么Android上使用加载程序和fts3表的listview是空的?,java,android,sql,sqlite,listview,Java,Android,Sql,Sqlite,Listview,基本上,我的listview使用游标加载程序加载数据,在正常的表中显示良好,但一旦我将表转换为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

基本上,我的listview使用游标加载程序加载数据,在正常的表中显示良好,但一旦我将表转换为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"+");";
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;
 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;
}
onCreateCursorLoader:

 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"+");";
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;
 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;
}
我还注意到,当我删除where参数时,它起了作用(但我需要该参数)

内容提供商:

 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"+");";
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;
 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表无法支持游标加载程序()查询()


总的来说,fts3默认情况下不支持括号,我发现上面两个方法的选择参数在执行时自动位于括号内。由于这个原因,我的listview是空的,这就是为什么一旦删除where子句,它就会再次工作。但是,我需要这个选择参数,在一天结束时,我还没有一个实际的解决方案来解决搜索互联网后的问题。

您是否尝试“手动”执行sqlite3应用程序并测试您的查询?