0
서버에서 데이터를 얻을 때, 나는 내 자신의 콘텐츠 공급자에 데이터를 삽입하지만 항상 오류가 발생했습니다.()는 SQLiteDatabase.isOpen을 확인합니다,안드로이드 삽입 데이터 SQLite 오류 java.lang.IllegalStateException에 의해 발생 : 데이터베이스가 열려
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();
}
그리고 난 안드로이드 소스 코드에서 오류 메시지를 찾을 :이 로그
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
내 삽입 코드 getWritableDatabase 함수에서 항상 데이터베이스가 열려 있는지 확인합니다.
if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) {
return mDatabase; // The database is already open for business
}
그래서이 오류의 원인을 알 수없는 이유는 데이터베이스가 열리지 않은 이유입니다.
'finally { db.close(); }' – Luksprog
고맙습니다. 그것은 성공적으로 작동, 하지만 난 항상 wirte 후 폐쇄 다른 프로젝트에서 작동합니다. 콘텐츠 공급자의 데이터베이스를 닫을 수없는 이유는 무엇입니까? – regrecall
이유를 모르겠습니다. 얼마 전 데이터베이스 예외를 해결하기 위해 노력하고 있었고 오류 유형을 확인하고 위에서 말한 답변 중 하나를 기억했습니다. 나는'try-finally'와 간단한'insert'를 사용하여'ContentProvider' 중 하나에서 약간의 테스트를했고 완벽하게 작동합니다. – Luksprog