Android 6.0更新导致在init期间DB sqlite崩溃

时间:2015-10-27 00:06:04

标签: android sqlite crash android-6.0-marshmallow

我在应用程序类文件中创建数据库的代码正在处理成千上万的设备,但最近我遇到崩溃,很多次,都来自android 6.0,所以它可能与新的Android版本有关。此次崩溃只发生在下面给出的3台设备上。请告知如何解决这个问题..

设备: 画布A1(AQ4501_sprout),Dream Uno(Mi-498_sprout),Sparkle V(Sparkle_V_sprout)

崩溃日志:

Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:571)
    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269)
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)

参考代码(崩溃发生在db.getWritableDatabase()):

//Application class
public class MyApp extends Application {

 @Override
 public void onCreate() {
    super.onCreate();
    dataBaseInit();
 }

 private void dataBaseInit() {
    db = new MyDatabase(getApplicationContext());

    // This will open an reference to database
    dataBaseRef = db.getWritableDatabase();
 }
}

//Database class
public class MyDatabase extends SQLiteOpenHelper {

  // All Static variables
  // Database Version
  private static final int DATABASE_VERSION = 1;

  // Database Name
  private static final String DATABASE_NAME = "myDatabase";

  public MyDatabase(Context context) {
     super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

}

崩溃发生在db.getWritableDatabase()。

请告知如何解决此问题。

1 个答案:

答案 0 :(得分:0)

我在添加" android.permission.WRITE_EXTERNAL_STORAGE"之后我遇到了问题。清单中的许可,但仍然像上面那样崩溃。