getDatabasePath()返回错误的路径

时间:2019-04-23 16:31:01

标签: android database sqlite filepath

我想在一个Android应用程序中备份我的sqlite数据库,并可以使用以下方法复制它:

"/data/data/ws.rtin.android.birthdates/databases/database"

收件人:

"/data/data/ws.rtin.android.birthdates/databases/database_bak"

,一切正常。但是Android Studio说:

  

请勿对/ data /进行硬编码,而应使用context.getfilesdir()。getpath()

但是context.getfilesdir().getpath()返回

  

“ / data / user / 0 / ws.rtin.android.birthdates / files”

或者,如果我使用getDatabasePath(DB_NAME).getPath() 它返回

  

“ / data / user / 0 / ws.rtin.android.birthdates / databases / Database”

两者都是错误的(而且我的数据库名称是database而不是Database)。此外,this.getDatabasePath()Context.getDatabasePath()getApplicationContext.getDatabasePath()返回所有相同的错误路径。

我已经在AVM和华为Mate 10 pro上进行了尝试。两者都不起作用。下面的源正在工作:

    try {

        InputStream is = new FileInputStream("/data/data/ws.rtin.android.birthdates/databases/database");
        OutputStream os = new FileOutputStream("/data/data/ws.rtin.android.birthdates/databases/database_bak");
        byte[] buff = new byte[1024];
        int len;
        while ((len = is.read(buff)) > 0) {
            os.write(buff, 0, len);
        }
        is.close();
        os.close();

        Toast.makeText(this, this.getResources().getString(R.string.Database_Saved), Toast.LENGTH_SHORT).show();

    } catch (Exception e) {
        Toast.makeText(this, this.getResources().getString(R.string.Failed), Toast.LENGTH_SHORT).show();
    }

我期望getDatabasePath(DB_NAME).getPath()返回正确的路径,但是现在我不确定,因为对路径进行硬编码会在以后的android-api中引起麻烦,我不知道如何处理。

0 个答案:

没有答案