anber писал(а):Тестируешь на девайсе? Попробуй полностью удалить приложение с него, сделать rebuild и установить.
UPD. Покажи как открываешь базу данных.
открывается база просто, есть класс DbHelper с константами имен полей и т.д. + логика отвечающая за копирование бд. Далее(открывает метод open(), остальное для полноты):
Код: Выделить всё
private SQLiteDatabase database;
private DbHelper dbHelper;
private String[] allColumns = { DbHelper.COLUMN_ID, DbHelper.COLUMN_CURSES, DbHelper.COLUMN_URL,
DbHelper.COLUMN_CURSES_NUMBER};
public CursesDataSource(Context context) {
dbHelper = new DbHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getReadableDatabase();
}
[ИНТЕРЕСНО]возможно я не правильно понял причину ошибки, но раз ее нет нет времени заморачиваться, но в DBHelper я на всякий случай оставил метод open(), сейчас он не используется но базу открывал без ошибок...:
Код: Выделить всё
public void open() {
// Open the database
String myPath = DATABASE_PATH + DATABASE_NAME;
database = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
далее код, который я показывал выше отвечает за чтение из бд и помещает результат в Map<String, String>, используется метод cursorToCurse(Cursor cursor):
Код: Выделить всё
private Curses cursorToCurse(Cursor cursor) {
Curses curse = new Curses();
curse.setId(cursor.getLong(0));
curse.setCurses(cursor.getString(1));
curse.setUrl(cursor.getString(2));
curse.setLesson_number(cursor.getString(3));
return curse;
}
который в свою очередь помещает данный из базы в объект класса Curses и далее уже из этих объектов заполняется Map(он мне нужен, поскольку для списка использую кастомный адаптер, кода там не мало, поскольку приходилось сортировать Map объекты, потому переписывать только из за перехода данных в бд не хочу.. мне проще заполнить Map из базы и не трогать существующую логику.)
P.S. собственно забыл написать - уже решено, проблема была в правах, тестировал в Genymotion и на реальном устройстве + емулятор, вероятно запутался когда руками копировал базу, потому SQL выполнялся в терминале, оказалось без прав рута база копировалась не правильно, работало только в эмуляторе, потому поправил копирование - работает. Плюс приходится делать копирование базы отдельным потоком, поскольку если базы нет(первый запуск/очистка устройства) Курсор вылетает и лист вью пустой...приходится возвращаться. Так что вопрос практически решен - проблема была на стадии копирования бд, но вот осталось переписать логику копирования бд в другом потоке и делать запрос только после синхронизации...
Сорри много букв наверно, но бежать надо - зашел перед выходом, решил быстро ответить не думая )))