Java Api 29(Android Q)的外部应用程序目录中的SQLiteOpenHelper
对于android Q Api 29,我如何执行以下情况Java Api 29(Android Q)的外部应用程序目录中的SQLiteOpenHelper,java,android,sqlite,sqliteopenhelper,android-10.0,Java,Android,Sqlite,Sqliteopenhelper,Android 10.0,对于android Q Api 29,我如何执行以下情况 我的目的是保存在一个目录中,该目录在卸载应用程序后将继续存在 它具有以下类及其构造函数: public class SqlHelper extends SQLiteOpenHelper { //constructor SqlHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
我的目的是保存在一个目录中,该目录在卸载应用程序后将继续存在 它具有以下类及其构造函数:
public class SqlHelper extends SQLiteOpenHelper {
//constructor
SqlHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//rest of the class
}
在我的DAO中调用数据库时:
public class Dao {
private Context context;
protected SQLiteDatabase db;
public Dao(Context context) {
this.context = context;
}
protected void openDataBase() {
String pathDB = FOLDER_NAME_DBASE;
//getExternalStorageDirectory() deprecated Api 29
File dir = new File(Environment.getExternalStorageDirectory(), pathDB);
String dBasePath = dir.getPath() + "/" + mydatabse.db3;
SqlHelper varHelp = new SqlHelper(
context,
dBasePath,
null,
DBASE_VERSION
);
db = varHelp.getWritableDatabase();
}
//rest of the class
}
使用SQLiteOpenHelper有没有办法在Api 29的公共文档文件夹中创建数据库
感谢您的关注对于任何版本的Android来说,在外部存储上放置实时SQLite数据库都是不明智的。数据损坏的风险更大,因为其他应用程序可能会尝试使用该文件
但是,如果希望忽略该建议,可以使用Android 10上的getExternalFilesDir作为数据库的基本目录。这是用户可以访问的,尽管位置不太友好。您是否尝试将android:requestLegacyExternalStorage=true添加到清单中,我将尝试。ThanksMy的目的是保存在卸载应用程序后仍将存在的目录中。卸载应用程序后,使用getExternalFilesDir将显示当前文件removed@MurilloComino只需启用备份,然后,它至少会在重新安装时被还原。对于调试版本,这应该被禁用。@MurilloComino:我的目的是在卸载应用程序后保留在一个将继续存在的目录中-您需要在备份或导出选项中这样做。您不再能够直接访问您所寻找的位置,SQLite需要直接访问文件系统。感谢您的支持,我将遵循这些建议。