Не удается получить доступ к существующей базе данных в Android P - PullRequest
0 голосов
/ 30 мая 2018

Я использовал уже существующую базу данных в своем приложении, которая помещена в папку ресурсов, и я использую эту уже существующую структурированную для хранения данных.это работает нормально на всех устройствах Android.

Но почему-то это не работает в бета-версии Android P.Когда я распаковываю базу данных и сохраняю ее во внутренней памяти, а когда закрываю этот объект базы данных, файл базы данных поврежден, поэтому после закрытия базы данных в этом файле базы данных остается только таблица «android-metadata», другие таблицы удаляются автоматически.

Пожалуйста, совет. !!что будет причиной.Вот мой код

public void open() throws SQLException {
        try {
            boolean isExist = mDatabaseHelper.checkDataBase();
            if (isExist == false) {
                mDatabase = mDatabaseHelper.getWritableDatabase();
                mDatabaseHelper.copyFromZipFile();
                if (mDatabase.isOpen()) {
                    mDatabase.close();
                }
            }
            mDatabase = mDatabaseHelper.getWritableDatabase();

        } catch (Exception e) {
            Logger.d(TAG, e.getMessage());
            e.printStackTrace();
        }
    }



/**
     * This method is used to close the dataHelper object.
     */
    public void close() {
        try {
            if (mDatabase != null && mDatabase.isOpen())
                mDatabase.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public boolean checkDataBase() {
        PACKAGE = mContext.getApplicationContext().getPackageName();
        DB_PATH = DATA + PACKAGE + "/databases/";
        Logger.d(TAG, DB_PATH);
        File f = new File(DB_PATH + mDatabaseName);
        return f.exists();
    }

    public void copyFromZipFile() throws IOException {
        InputStream is = mContext.getAssets().open("xyz.zip");
        // Path to the just created empty db
        PACKAGE = mContext.getApplicationContext().getPackageName();
        Logger.d(TAG, DB_PATH);
        File outFile = new File(DB_PATH, mDatabaseName);
        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFile.getAbsolutePath());
        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is));
        try {
            while (zis.getNextEntry() != null) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int count;
                while ((count = zis.read(buffer)) != -1) {
                    baos.write(buffer, 0, count);
                }
                baos.writeTo(myOutput);
            }
        } finally {
            zis.close();
            myOutput.flush();
            myOutput.close();
            is.close();
        }
    }
...