gpt4 book ai didi

java - 删除 SQLite 表时出现 IllegalStateException - Android

转载 作者:行者123 更新时间:2023-12-01 14:50:01 26 4
gpt4 key购买 nike

我有一个显示高分表的 SQLite 数据库。我想让用户可以选择根据需要删除高分(请参见下面的屏幕截图)。如果用户选择"is",我希望关闭对话框,然后对话框后面的屏幕将显示为空,除了 4 个列标题、2 个按钮和 Activity 标题。

现在,当用户选择"is"时,它会显示以下 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();
}

enter image description here

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

最佳答案

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase

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

你在哪里关闭数据库?您应该在 onDestroy()onStop() 方法中关闭所有数据源、光标等。

关于java - 删除 SQLite 表时出现 IllegalStateException - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14983034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com