gpt4 book ai didi

android - "IllegalStateException: database not open"- 屏幕方向改变

转载 作者:行者123 更新时间:2023-11-29 02:15:55 26 4
gpt4 key购买 nike


我有“java.lang.IllegalStateException:数据库未打开” - 当我在升级数据库时更改屏幕方向时。
当我的数据库版本发生变化时,将调用 SQLiteOpenHelper 子类的 onCreate() 。在这种方法中,我只是删除以前的表,创建新表并用数据填充它们。数据库很大,数据是从文件中读取的,所以我将数据填充到 AsyncTask 子类中。

所以,这是我的代码中最重要的部分。
Activity :

 
public class MyActivity extends Activity {
...
private MyOpenHelper dbHelper;
private SQLiteDatabase db;

public void onCreate(Bundle savedInstanceState) {

dbHelper = new MyOpenHelper(this);
db = dbHelper.getWritableDatabase();
...
}

protected void onDestroy() {
if (null != db && db.isOpen() && !db.isDbLockedByOtherThreads()){
db.close();
...
}
...
}

MyOpenHelper:


public class MyOpenHelper extends SQLiteOpenHelper
...
public void onCreate(SQLiteDatabase db) {

db.beginTransaction();
try {
//drop...
//create...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
/* populate database with data */
SQLiteDatabaseInitializer dbInit = new SQLiteDatabaseInitializer(mContext, db, mDialogHost, "db.txt");
dbInit.execute();
}

我知道问题在于,当我更改屏幕方向时,数据库实例会关闭 - 在 Activity.onDestroy() 中。但我最终必须关闭它。这里最好的方法是什么?有人遇到过同样的问题吗?

最佳答案

您能否尝试将 Activity 强制到特定方向,使其无法转换到其他方向?

<activity android:name=".views.AfterActionReview" android:label="@string/app_name" 
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.DEFAULT" />
<category android:name="android.intent.category.VIEW" />
</intent-filter>
</activity>

如果这对您的应用程序的整体使用有问题,请考虑将数据库更新过程移动到一个您可以安全地锁定到特定方向的新 Activity ,然后在完成数据库更新后切换回另一个 Activity 。

我认为如果用户在您的长时间运行更新正在进行时退出您的应用,您可能仍会遇到类似的问题。

额外的 Activity 还可以让您警告用户不要在更新时中断 Activity。

希望对您有所帮助。

关于android - "IllegalStateException: database not open"- 屏幕方向改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950279/

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