Не удалось прочитать строку 0, столбец 8 из CursorWindow - PullRequest
0 голосов
/ 01 марта 2020

У меня проблема. Я не могу получить и установить BLOB из моей базы данных. После открытия приложения я получаю эту ошибку в Logcat

. Причина: java .lang.IllegalStateException: Не удалось прочитать строку 0, столбец 8 из CursorWindow. Убедитесь, что курсор инициализирован правильно перед доступом к данным из него.

private static final String KEY_IMAGE = "image";

    public Note getNote(long id){
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.query(DATABASE_TABLE,new String[] {KEY_ID,KEY_TITLE,KEY_CONTENT,KEY_PHONE,KEY_CLIENT,KEY_AGE,KEY_DATE,KEY_TIME,KEY_IMAGE}, KEY_ID+"=?",

                    new String[]{String.valueOf(id)}, null, null,null);
            if (cursor != null)
                cursor.moveToFirst();
            return new Note(cursor.getLong(0)
                    ,cursor.getString(1)
                    ,cursor.getString(2)
                    ,cursor.getString(3)
                    ,cursor.getString(4)
                    ,cursor.getString(5)
                    ,cursor.getString(6)
                    ,cursor.getString(7)
            ,cursor.getBlob(8));
        }

        public List<Note> getNotes() {
            SQLiteDatabase db = this.getReadableDatabase();
            List<Note> allNotes = new ArrayList<>();

            String query = "SELECT * FROM " + DATABASE_TABLE + " ORDER BY "+KEY_TITLE+" ASC";
            Cursor cursor = db.rawQuery(query,null);
            if(cursor.moveToFirst()){
                do{
                    Note note = new Note();
                    note.setID(Long.parseLong(cursor.getString(0)));
                    note.setTitle(cursor.getString(1));
                    note.setAge(cursor.getString(2));
                    note.setPhone(cursor.getString(3));
                    note.setClient(cursor.getString(4));
                    note.setContent(cursor.getString(5));
                    note.setDate(cursor.getString(6));
                    note.setTime(cursor.getString(7));
                    note.setImage(cursor.getBlob(8));
                    allNotes.add(note);


                }while(cursor.moveToNext());

            }

            return allNotes;

        }

Спасибо за помощь.

1 Ответ

0 голосов
/ 01 марта 2020

Я думаю, что вы не используете правильный метод для данных, к которым вы обращаетесь в базе данных, например, вы говорите getLong (0), но, возможно, в этом столбце есть какой-то другой тип значения, пожалуйста, удвойте проверьте ваш запрос создания таблицы, и если вы хотите сохранить изображения, вы должны использовать файл-провайдер вместо blob.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...