Android вставляет данные SQLite ошибка Вызвано java.lang.IllegalStateException: база данных не открыта - PullRequest
0 голосов
/ 02 марта 2012

Когда я получаю данные с сервера, я вставляю данные в свой собственный контент-провайдер, но это всегда ошибка. Это журнал

 Caused by: java.lang.IllegalStateException: database not open
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1585)
at com.weiboa.data.StatusProvider.insert(StatusProvider.java:107
    at android.content.ContentProvider$Transport.insert(ContentProvider.java:210)
    at android.content.ContentResolver.insert(ContentResolver.java:606)
    at com.weiboa.util.WeiboUserUtil.insertTweet(WeiboUserUtil.java:121)

и это мой код вставки в моем ContentProvider:

SQLiteDatabase db = dbHelper.getWritableDatabase();
try{
    long id = db.insertWithOnConflict(TABLE, null, values,SQLiteDatabase.CONFLICT_REPLACE);
    if(id == -1){
        throw new RuntimeException(String.format("%s : Failed to insert [%s] to [%s] for unknow reason,", TAG, values, uri));
    }else{
        return ContentUris.withAppendedId(uri, id);
    }
 }finally{
    db.close();
 }

И я нахожу сообщение об ошибке в исходном коде Android, оно проверяет SQLiteDatabase.isOpen (), а в функции getWritableDatabase всегда проверяет, открыта ли база данных?

if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) {
        return mDatabase;  // The database is already open for business
    }

Так что я не знаю реальной причины, вызвавшей эту ошибку, из-за которой база данных не открылась.

1 Ответ

0 голосов
/ 15 ноября 2012

У меня была точно такая же проблема.

Как упоминалось в первом комментарии @Luksprog, просто удалите

db.close();

Как правило, в контент-провайдере вам никогда не нужно явно закрывать базу данных. Помощник сделает это за вас.

...