Je crée une application. Je reçois cette erreur:Fuite de base de données SQLite trouvée
11-08 13:46:24.665: ERROR/Database(443): java.lang.IllegalStateException: /data/data/com.testproj/databases/Testdb SQLiteDatabase created and never closed
Je ne peux pas sembler trouver la raison de cela, comme il Somethimes me montre l'erreur, parfois pas. Voici mon code:
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();
}
}
}
}
Dans une autre classe, j'ai ces requêtes:
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;
}
}
Mon problème est quand je commence une nouvelle activité dans laquelle je reçois un AsyncTask
. Cette tâche obtient des données à partir d'un service Web et accède à la base de données pour le String
. Voici le 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;
}
}
Si je laisse l'activité suivre son cours, tout va bien. Si je ne le fais pas et appuyez rapidement sur le bouton de retour, j'obtiens l'erreur. Toute suggestion sur la façon de résoudre ce problème?
pouvons-nous avoir besoin de déclarer cursor = null; –