android的存储路径设置,Android 设置room的db文件存放路径

最近用room用的多,很方便,百度也搜的多,在网上也看到了这个问题,这个问题我们从源码出发寻找答案。

开始我们以配置room的文件名方法出发,看看这个name到底在最后起到什么作用

b42dcabeb661

image.png

进入

b42dcabeb661

image.png

在进入RoomDatabase.Builder

b42dcabeb661

image.png

最后发现在build方法中用到了

b42dcabeb661

image.png

继续进入DatabaseConfiguration的构造方法

最后跟踪到AppDatabase子类的validateMigration方法

b42dcabeb661

image.png

最后我们看看configuration.sqliteOpenHelperFactory.create是做了什么

b42dcabeb661

image.png

可以看出这里new了FrameworkSQLiteOpenHelper实例,那我们进入到他的构造方法中

中间沿着name走,最后动了SQLiteOpenHelper类的getDatabaseLocked方法

b42dcabeb661

image.png

注意这句mContext.getDatabasePath(mName),我们继续跟进,来到ContextImpl对应方法中。

@Override

public File getDatabasePath(String name) {

return validateFilePath(name, false);

}

private File validateFilePath(String name, boolean createDirectory) {

File dir;

File f;

if (name.charAt(0) == File.separatorChar) {

String dirPath = name.substring(0, name.lastIndexOf(File.separatorChar));

dir = new File(dirPath);

name = name.substring(name.lastIndexOf(File.separatorChar));

f = new File(dir, name);

} else {

dir = getDatabasesDir();

f = makeFilename(dir, name);

}

if (createDirectory && !dir.isDirectory() && dir.mkdir()) {

FileUtils.setPermissions(dir.getPath(),

FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH,

-1, -1);

}

return f;

}

简单的代码,意思是原来Android本身已经实现了自定义路径的方法了,只要传入的path的第一个字符为"/"就行了。

所以我的项目中将db文件存入到了外置sd卡,代码如下

String dbPath = "maixinxi.db";

if(Tools.existSDCard()){

dbPath = Configure.MAIXINXI_DIR+ File.separator+"dataBase"+File.separator+"maixinxi.db";

}

mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, dbPath)

.allowMainThreadQueries()

.build();

//其中MAIXINXI_DIR为

//public static final String MAIXINXI_DIR=Environment.getExternalStorageDirectory().getPath()+ File.separator+"maixinxi";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值