Невозможно получить данные из базы данных sqlite в Android Pie - PullRequest
0 голосов
/ 16 октября 2018

Все, что я делаю, это сохраняю файл базы данных в папке активов, затем создаю и копирую данные из него.Код отлично работает в старых версиях, но падает в Pie, пожалуйста, просмотрите код ниже.

   public DBHelper(Context context, String DatabaseName) {
    super(context, DatabaseName, null, DBVersion);
    // TODO Auto-generated constructor stub
    this.myContext = context;
    this.DB_NAME = DatabaseName;
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        SQLiteDatabase database = getReadableDatabase();
        Complete_PATH = database.getPath();
        database.close();
    }
    if (android.os.Build.VERSION.SDK_INT >= 4.1) {
        DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
        Complete_PATH = DB_PATH + DB_NAME;
    } else {
        DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
        Complete_PATH = DB_PATH + DB_NAME;
    }

    checkDB = SQLiteDatabase.openDatabase(Complete_PATH, null, SQLiteDatabase.OPEN_READWRITE);
    checkDB.disableWriteAheadLogging();
}


 public void createDataBase() throws IOException {
    boolean dbExist = checkDataBase();
    if (dbExist) {
        Log.v("database", "database exist" + "");
    } else {
        Log.v("database", "database not exist" + "");
        this.getReadableDatabase();
        try {
            copyDataBase();
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
    }
}

private void copyDataBase() throws IOException {
    InputStream myInput = myContext.getAssets().open(DB_NAME);

    OutputStream myOutput = new FileOutputStream(Complete_PATH);

    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }
    myOutput.flush();
    myOutput.close();
    myInput.close();
}

public void openDataBase() throws SQLException {
    try {
        myDataBase = SQLiteDatabase.openDatabase(Complete_PATH, null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    } catch (Exception e) {
        // TODO: handle exception
    }
}

public void closeDatabase() {
    if (myDataBase != null)
        myDataBase.close();
}

Вот код, пожалуйста, смотрите.Сбой при запуске запроса для выбранных данных.

Error -      Caused by: android.database.sqlite.SQLiteException: no such table: Schedule (code 1 SQLITE_ERROR): , while compiling: select * from  Schedule where schedule_category ='schedule'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...