美文网首页android
Android 设置room的db文件存放路径

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

作者: 坑逼的严 | 来源:发表于2019-09-25 15:46 被阅读0次

最近用room用的多,很方便,百度也搜的多,在网上也看到了这个问题,这个问题我们从源码出发寻找答案。
开始我们以配置room的文件名方法出发,看看这个name到底在最后起到什么作用


image.png

进入


image.png
在进入RoomDatabase.Builder
image.png
最后发现在build方法中用到了
image.png

继续进入DatabaseConfiguration的构造方法
最后跟踪到AppDatabase子类的validateMigration方法


image.png
最后我们看看configuration.sqliteOpenHelperFactory.create是做了什么
image.png
可以看出这里new了FrameworkSQLiteOpenHelper实例,那我们进入到他的构造方法中
中间沿着name走,最后动了SQLiteOpenHelper类的getDatabaseLocked方法
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";

相关文章

  • Android 设置room的db文件存放路径

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

  • DownLoadManager遇到的问题

    问题1 问题描述:使用DownLoadManager下载,设置好下载文件的存放路径。当我们根据这个路径去读取文件的...

  • Ubuntu 16.04 64bit 编译 Android 4.

    1.获取Android源码 (1)下载repo 在用户目录下创建一个bin文件夹来存放repo,并把该路径设置到环...

  • 配置pch文件

    设置Prefix Header文件存放的路径为 当前项目的一级目录

  • Android Room DB Tips

    清空表数据 检查数据是否存在

  • Mac flutter no devices解决方法

    第一步:设置android sdk路径: 第二步:设置android studio文件夹路径 第三步:重启Andr...

  • AndroidStudio 缓存文件夹配置

    缓存文件夹说明 如何配置 .android 设置环境变量:ANDROID_SDK_HOME=要设置的路径(比如:F...

  • django ImageField使用默认图片

    修改models.py: setting.py文件: 设置文件上传路径,图片上传、文件上传都会存放在此目录里 我的...

  • flutter & iOS

    拿到我的Demo之后先要修改iOS工程中的Podfile文件里设置的路径,需要修改成你自己电脑中具体存放的路径。 ...

  • CentOS7 自定义服务

    服务配置 服务配置主目录存放路径 文件内容格式 举个栗子 tomcat 服务 测试 tomcat 服务 设置开机启动

网友评论

    本文标题:Android 设置room的db文件存放路径

    本文链接:https://www.haomeiwen.com/subject/cbvmyctx.html