是否有可能从领域迁移到Sqlite?

时间:2017-05-26 19:33:08

标签: android android-sqlite realm database-migration

由于某些原因(主要是大的apk大小,即使ABI分裂,无论如何)我需要完全删除Realm并使用Sqlite而不会丢失数据。

我无法找到方法。应用程序似乎必须继续使用Realm,否则用户将完全丢失其数据。

任何想法都将受到赞赏

2 个答案:

答案 0 :(得分:3)

我不认为我完全理解你的问题是什么。如果你问是否有一个工具可以自动为你进行数据迁移,那么不,没有这样的工具。

否则它很直接:

  1. onCreate课程的实施中处理onDowngradeonUpgradeSQLiteOpenHelper方法。

  2. 在您的onCreate方法中,创建表格后立即从 Realm 获取所有数据并插入到SQLite表格中。

  3. 这样的事情:

    Realm realm = Realm.getDefaultInstance();
    RealmResults<MyClass> all = realm.where(MyClass.class)
                                     .findAll();
    for (MyClass instance : all) {
        doInsert(instance);
    }
    

    我实际建议您在使用Realm时查看how to reduce APK size,但这取决于您

    编辑1 您必须先确保先迁移数据然后删除Realm文件。虽然不是数据文件使你的APK变大,而是Realm附带的实际库。因此,对于此,您将不得不采取两个步骤:首先发布将数据迁移到SQLite的更新,并在一段合理的时间(如一周)之后,您可以发布完全取出Realm库的更新。希望它有意义。

答案 1 :(得分:1)

我知道(不确定)如果您使用默认的RealmConfig,Context.getFilesDir()可以返回default.realm所在的文件夹。您不需要修改它们的权限。您可以迭代此文件夹下的文件以删除它们。希望它有效。

PS:Apache-commons有一个很棒的FileUtils.java

祝你好运

埃姆雷