为什么有些用户在SQLiteDatabase.dbopen越来越SQLiteException()?用户、SQLiteDatabase、SQLiteException、dbopen

2023-09-06 05:05:24 作者:爷爷一身公主病

下面是个例外:

 了java.lang.RuntimeException:无法启动活动ComponentInfo {spb.bridges / spb.bridges.Bridges}:android.database.sqlite.SQLiteException:无法打开数据库文件在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)在android.os.Handler.dispatchMessage(Handler.java:99)在android.os.Looper.loop(Looper.java:123)在android.app.ActivityThread.main(ActivityThread.java:4627)在java.lang.reflect.Method.invokeNative(本机方法)在java.lang.reflect.Method.invoke(Method.java:521)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)在dalvik.system.NativeStart.main(本机方法)android.database.sqlite.SQLiteException:引起无法打开数据库文件在android.database.sqlite.SQLiteDatabase.dbopen(本机方法)在android.database.sqlite.SQLiteDatabase<&初始化GT;(SQLiteDatabase.java:1921)在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:883)在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:960)在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:953)在android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:602)在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)在spb.bridges.DbAdapter.open(DbAdapter.java:172)在spb.bridges.Bridges.onCreate(Bridges.java:90)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

和这里的code DbAdapter.open

 公共DbAdapter的open()抛出的SQLException {    mDbHelper =新DatabaseHelper(mCtx);    MDB = mDbHelper.getWritableDatabase();    返回此;} 
课程32 客户端数据库sqlite

Bridges.onCreate

  @覆盖公共无效的onCreate(捆绑savedInstanceState){    super.onCreate(savedInstanceState);    的setContentView(R.layout.bridges_list);    mDbHelper =新DbAdapter(本);    mDbHelper.open(); 

解决方案

看起来你上下文不充分,当您打开您的数据库初始化。

在你的 Bridges.onCreate 方法,你叫 super.onCreate 的setContentView 之前的任何其他操作?

Here is the exception:

java.lang.RuntimeException: Unable to start activity ComponentInfo{spb.bridges/spb.bridges.Bridges}: android.database.sqlite.SQLiteException: unable to open database file
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: unable to open database file
at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1921)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:883)
at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:960)
at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:953)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:602)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
at spb.bridges.DbAdapter.open(DbAdapter.java:172)
at spb.bridges.Bridges.onCreate(Bridges.java:90)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

and here is the code of DbAdapter.open:

public DbAdapter open() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}

Bridges.onCreate:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.bridges_list);
    mDbHelper = new DbAdapter(this);
    mDbHelper.open();

解决方案

It looks like you context is not fully initialized when you open your database.

In your Bridges.onCreate method, do you call super.onCreate? setContentView before any other operations?