1

SimpleCursorAdapter とデータベース テーブルを使用してリストを作成しています。リストが作成され、リスト項目をクリックして目的の項目を開くことができます (これにより、新しいアクティビティが開始されます)。問題は、戻るキーを押すと、次のエラーが発生することです。

IllegalStateException: データベースは既に閉じられています。

私のコードは次のとおりです。

public class populatingLectures extends ListActivity{

private static String[] FROM = {SUBJECT, TOPIC, LECTURENUMBER, DATE };
private static int[] TO = {R.id.subject, R.id.topic,
        R.id.lecturenumber, R.id.date };
private static String[] data = { SUBJECT, TOPIC, LECTURENUMBER, _DATA };
private static String ORDER_BY = DATE + " DESC";
private SoftCopyDatabase lectures;  
String gotId;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SoftCopyDatabase lectures = new SoftCopyDatabase(this);
    try {
        Cursor cursor = getLectures();
        showLectures(cursor);
    } finally {
        lectures.close();
    }
}

public void onStart() {
    super.onStart();
    lectures = new SoftCopyDatabase(this);
    try {
        Cursor cursor = getLectures();
        showLectures(cursor);
    } finally {
        lectures.close();
    }
}

private Cursor getLectures() {

    SQLiteDatabase db = lectures.getReadableDatabase();

    Cursor cursor = db.query(TABLE_NAME,null, "subject=?", new String[] {OpenClick.subjectName}, null, null,
            ORDER_BY);
    startManagingCursor(cursor);
    return cursor;
}


private void showLectures(Cursor cursor) {

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.item_lectures, cursor, FROM, TO);
    setListAdapter(adapter);
}

private Cursor getFileName(String ID) {

    SQLiteDatabase db = lectures.getReadableDatabase();
    Cursor cursor = db.query(TABLE_NAME, data, "_ID=?",
            new String[] { ID }, null, null, null);
    startManagingCursor(cursor);
    return cursor;
}


@Override
protected void onListItemClick(ListView listView, View view, int position,
        long id) {
    super.onListItemClick(listView, view, position, id);

             //...CODE TO START NEW ACTIVITY

    }
}


}

私がやっている間違いを教えてください。どこでも明示的にデータベースを閉じていないためです。

よろしく、ワネヤ・イクバル。

4

2 に答える 2

4
finally
{       
 lectures.close();
}

この行は例外だと思うので、 に入れますonDestroy()

于 2011-08-18T17:29:34.100 に答える
0

リストにデータを入力するとすぐにデータベースを閉じます。あなたは移動する必要があります

lectures.close() 

onStart() から onDestroy() への行。これにより、リストが作成された直後ではなく、アクティビティが完了したときにデータベースが確実に閉じられます。

于 2011-08-18T17:18:56.680 に答える