Java 删除SQLite表时出现非法状态异常-Android

Java 删除SQLite表时出现非法状态异常-Android,java,android,sqlite,illegalstateexception,Java,Android,Sqlite,Illegalstateexception,我有一个显示高分表的SQLite db。我想让用户选择删除高分,如果他们愿意(见下面的屏幕截图)。如果用户选择是,我希望对话框关闭,然后对话框后面的屏幕为空,除了4列标题、2个按钮和活动标题 现在,当用户选择Yes时,它给出下面的LogCat 02-20 09:59:39.686: E/AndroidRuntime(2458): FATAL EXCEPTION: main 02-20 09:59:39.686: E/AndroidRuntime(2458): java.lang.IllegalS

我有一个显示高分表的SQLite db。我想让用户选择删除高分,如果他们愿意(见下面的屏幕截图)。如果用户选择是,我希望对话框关闭,然后对话框后面的屏幕为空,除了4列标题、2个按钮和活动标题

现在,当用户选择Yes时,它给出下面的LogCat

02-20 09:59:39.686: E/AndroidRuntime(2458): FATAL EXCEPTION: main
02-20 09:59:39.686: E/AndroidRuntime(2458): java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/matt.lyons.bibletrivia/databases/test3
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1489)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at matt.lyons.bibletrivia.DatabaseHelper.deleteAll(DatabaseHelper.java:46)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at matt.lyons.bibletrivia.Highscores$3.onClick(Highscores.java:198)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.view.View.performClick(View.java:4202)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.view.View$PerformClick.run(View.java:17340)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.os.Handler.handleCallback(Handler.java:725)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.os.Looper.loop(Looper.java:137)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at java.lang.reflect.Method.invoke(Method.java:511)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-20 09:59:39.686: E/AndroidRuntime(2458):     at dalvik.system.NativeStart.main(Native Method)
DatabaseHelper.java

//Delete all rows/whole table from high scores.
public int deleteAll() { 
    return db.delete(TABLE, null, null);  //Line 46
}
Highscores.java

public void areYouSure() {

    final Dialog dialog = new Dialog(context);
    dialog.setContentView(R.layout.clearhighscores);
    dialog.setTitle("Clear Highscores?");

    TextView question = (TextView)dialog.findViewById(R.id.question);
    Button yes = (Button)dialog.findViewById(R.id.yes);
    Button no = (Button)dialog.findViewById(R.id.no);

    question.setText("This is not reversable.  Are you sure you want to delete the high scores?");
    yes.setText("Yes");
    no.setText("No");

    yes.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            dh.deleteAll();  //Line 198
            dialog.dismiss();


        }
    });

    no.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            dialog.dismiss();
        }
    });
    dialog.show();
}

我的问题是如何让用户删除数据库而不使程序崩溃

java.lang.IllegalStateException:尝试重新打开已关闭的 对象:SQLiteDatabase

这意味着您试图删除数据,但数据库已关闭。所以,在删除之前,您需要检查数据库是否打开,如果未打开,请打开它,否则只需执行删除操作


你在哪里?您应该关闭
ondestory()
onStop()
方法中的任何数据源、光标等。

可逆的拼写为i。在对数据库运行语句之前,您需要先打开数据库。谢谢您的打字错误修复。:)