it-swarm.com.de

Datenbank kann nicht in Android Pie geöffnet werden (Android 9)

Ich habe die Funktion checkDataBase verwendet, um sicherzustellen, dass die Datenbank bereits vorhanden ist, um zu vermeiden, dass die Datei jedes Mal erneut kopiert wird, wenn Sie die Anwendung in Oreo öffnen. Aber in Android Pie funktioniert es nicht.

private boolean checkDataBase (String dbName, int dbVersion) {

    SQLiteDatabase checkDB = null;

    try {

        String myPath = DB_PATH + dbName;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.CONFLICT_ABORT);

        if (checkDB.getVersion() < dbVersion) {
            Timber.d("Delete database called");
            myContext.deleteDatabase(dbName);
            return false;
        }
    } catch(SQLiteException e) {

    }

    if(checkDB != null){
        checkDB.close();
    }

    return checkDB != null;
}

Der folgende Fehler wird angezeigt: os_unix.c: 36667: (2) Öffnen Sie (/data/data/my.androidPieTrial.app/databases/admin.db) Android.database.sqlite.SQLiteCantOpenDatabaseException: unbekannter Fehler (Code 14 SQLITE_CANTOPEN): Datenbank konnte nicht geöffnet werden

3
Veeresh P

Ich habe die Lösung bekommen. In Android Oreo und unter der Version funktioniert die Art, wie ich auf db zugreife, gut, aber in Android Pie funktionierte es nicht.

if (Android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        MySQLiteOpenHelper helper = new MySQLiteOpenHelper();
        SQLiteDatabase database = helper.getReadableDatabase();
        myPath = database.getPath();

    } else {
        String DB_PATH = Environment.getDataDirectory() + "/data/my.trial.app/databases/";
        myPath = DB_PATH + dbName;
    }

    checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    checkDB.disableWriteAheadLogging();
9
Veeresh P
context.getDatabasePath(the_database_name).getPath();

Funktioniert gut, da getDatabasePath() den absoluten Pfad im Dateisystem zurückgibt, in dem eine Datenbank erstellt wurde.

1
Mansoor Ali