Я создаю приложение.Я получаю эту ошибку:
11-08 13: 46: 24.665: ОШИБКА / База данных (443): java.lang.IllegalStateException: /data/data/com.testproj/databases/TestdbБаза данных SQLite создана и никогда не закрывается
Кажется, я не могу найти причину этого, так как иногда она показывает ошибку, иногда нет.Вот мой код:
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
.Эта задача получает данные из веб-службы и обращается к базе данных для 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;
}
}
Если я позволю занятию идти своим чередом, все будет хорошо.Если я этого не сделаю и быстро нажму кнопку «Назад», я получу ошибку.Любое предложение о том, как решить эту проблему?