アプリケーションを作成しています。このエラーが発生します:
11-08 13:46:24.665:ERROR / Database(443):java.lang.IllegalStateException:/data/data/com.testproj/databases/Testdb SQLiteDatabaseが作成され、閉じられませんでした
時々エラーが表示されるので、理由がわからないようです。これが私のコードです:
public class SQLiteAssistant extends SQLiteOpenHelper {
public SQLiteAssistant(Context context){
super(context, DB_NAME, null, DB_VERSION_NUMBER);
this.myContext = context;
}
public void openDataBase() throws SQLException{
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
public void closeDataBase() {
if(this.myDataBase != null) {
if(this.myDataBase.isOpen())
this.myDataBase.close();
}
}
}
}
別のクラスでは、次のクエリがあります。
public class Db{
private static SQLiteAssistant sqlite;
public static String getSomeString(Context ctx) {
sqlite = new SQLiteAssistant(ctx);
sqlite.openDataBase();
Cursor cursor = sqlite.myDataBase.rawQuery("SELECT someColumn from SomeTable",null);
if (cursor != null) {
if (cursor.getCount()==1) {
if(cursor.moveToFirst()) {
String testString = cursor.getString(cursor.getColumnIndex("someColumn"));
cursor.close();
sqlite.closeDataBase();
sqlite.close();
return testString
}
}
}
sqlite.closeDataBase();
sqlite.close();
return null;
}
}
私の問題は、を取得する新しいアクティビティを開始するときですAsyncTask
。このタスクは、Webサービスからデータを取得し、のデータベースにアクセスしますString
。これがAsyncTask
:
protected class BackTask extends AsyncTask<Context, String, String> {
@Override
protected String doInBackground(Context... params) {
try{
//get requeste data from the database
//access the web service
return result;
} catch (Exception e) {
return null;
}
return null;
}
}
活動を軌道に乗せれば、すべてうまくいきます。そうしないとすぐに戻るボタンを押すと、エラーが発生します。この問題を解決する方法について何か提案はありますか?