Почему SQLiteDatabase.rawQuery(4 аргумента) пытается преобразовать CrossProcessCursorWrapper в SQLiteCursor? (КлассКастИсключение)

я пытаюсь зарегистрировать и получить эти журналы в модульном тесте в Android, но внутри я получаю исключение ClassCastException

public Cursor rawQuery(String sql, String[] selectionArgs,
                       int initialRead, int maxRead) {
    SQLiteCursor c = (SQLiteCursor)rawQueryWithFactory(
                                                       null, sql, selectionArgs, null);
    c.setLoadStyle(initialRead, maxRead);

    return c;
}

Что логично, потому что rawQueryWithFactory, как и другие методы rawquery, возвращает CrossProcessCursorWrapper (реализующий интерфейс Cursor).

public Cursor rawQueryWithFactory(CursorFactory cursorFactory, String sql, String[] selectionArgs, String editTable) {

//doing stuff

// CrossProcessCursorWrapper implements the Cursor interface as SQLiteCursor but is not of SQLiteCursor type.
return new CrossProcessCursorWrapper(cursor);
}

Этот код взят из net.sqlcipher.database.SQLiteDatabase (Commit: c2aa13e490499482ab38075994cad327d2561749 [c2aa13e]).

ОБНОВИТЬ :

Вот мой код:

dbHelper = new LoggingRecordDBHelper(context, null);
db = dbHelper.getWritableDatabase("pass"); 
Cursor cursor =  db.rawQuery(dbHelper.SQL_LOGGINGRECORD_SELECT_ALL, null);

И журналы:

Выполнение тестов Тест запущен java.lang.ClassCastException: net.sqlcipher.CrossProcessCursorWrapper не может быть приведен к net.sqlcipher.database.SQLiteCursor

в сети.sqlcipher.database.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1485)

в com.eventmanagement.SQLCipherFetcher.getLogRecords(SQLCipherFetcher.java:31)

в com.eventmanagement.ApplicationTest.testReadLogs(ApplicationTest.java:64)

в java.lang.reflect.Method.invokeNative (собственный метод)

в android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)

в android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)

в android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)

в android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1738)


person Nelson Melina    schedule 06.11.2014    source источник
comment
Вы используете какой-то контент-провайдер?   -  person Selvin    schedule 06.11.2014
comment
Нет, но в моем коде ошибка не возникает. Я делаю dbHelper = new LoggingRecordDBHelper(context, null); db = dbHelper.getWritableDatabase (проход); Курсор курсора = db.rawQuery(dbHelper.SQL_LOGGINGRECORD_SELECT_ALL, null);   -  person Nelson Melina    schedule 06.11.2014
comment
похоже на ошибку в библиотеке sqlcipher...   -  person Selvin    schedule 06.11.2014
comment
Мы решили эту проблему. Дополнительную информацию можно найти здесь: groups.google.com. /d/msg/sqlcipher/7WnAgG14Yxc/_Fr9sD5mwxYJ   -  person Nick Parker    schedule 06.11.2014


Ответы (1)


Это ошибка, которая исправлена ​​в https://github.com/sqlcipher/android-database-sqlcipher/commit/d15b05edc773a0a7c3016bb6a91deec88f1fa7e7

person Nelson Melina    schedule 10.11.2014