Приложение Android не закрывало курсор или базу данных - PullRequest
0 голосов
/ 02 августа 2011

У меня проблема с вставкой элементов в мою базу данных.Это действительно странно, что программа будет работать через 4 строки и вставлять их нормально, но в 5-й строке происходит сбой, и я получил три отчета о том, что приложение не закрывало курсор или базу данных.В моем коде я закрываю и снова открываю и курсор, и базу данных, поэтому я действительно запутался в том, как это происходит.Вот код.

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode) {
        case REQUEST_CODE_NEW:
            if (resultCode == -1) {
                Integer chapterId = data.getIntExtra("chapterId", -1);
                Toast toast = Toast.makeText(this, "Selected Chapter: " + chapterId.toString(), Toast.LENGTH_LONG);
                if (chapterId != -1) {
                    DbHelper db = new DbHelper(this);
                    for (int i = 0; i < questions.getTitle().size(); i++) {
                        db.insertQuestion(chapterId.toString(), questions.getTitle().get(i), questions.getAnswer().get(i), questions.getAr().get(i));
                    }
                }
                toast.show();
            }
            break;
    }
}

То есть вызов базы данных, которая будет создана с помощью класса dbhelper.Вот помощник по базе данных

public void insertQuestion(String cat_id, String title, String answer, String article) {
    db.execSQL("INSERT INTO " + QUESTION_TABLE_NAME + " (title,answer,article,picture) VALUES ('" + title + "','" + answer + "','" + article + "','none')"); 
    String id = getQuestionId(title);
    db.execSQL("INSERT INTO " + REL_TABLE_NAME + " (question_id, cat_id) VALUES (" + id + "," + cat_id + ")");

}
public String getQuestionId(String title) {
    String id;
    cursor = this.db.rawQuery("SELECT question_id FROM " + QUESTION_TABLE_NAME + " WHERE title = '" + title + "' LIMIT 1", null);
    cursor.moveToFirst();
    id = cursor.getString(0);
    cursor.close();
    db.close();
    return id;
}

Я поместил курсор на уровне класса, чтобы попытаться лучше им управлять, но все равно безрезультатно.Его по-прежнему сбой после 4 запросов.

1 Ответ

1 голос
/ 02 августа 2011

Попробуйте это "исправить":

DbHelper db = new DbHelper(this);
try{
                    for (int i = 0; i < questions.getTitle().size(); i++) {
                        db.insertQuestion(chapterId.toString(), questions.getTitle().get(i), questions.getAnswer().get(i), questions.getAr().get(i));
                    }
}catch(Exception e1){
   android.util.Log.v("DbHelper Error","Crash: "+e1.getMessage(), e1);
}finally{
db.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...