由于某些原因(主要是大的apk大小,即使ABI分裂,无论如何)我需要完全删除Realm并使用Sqlite而不会丢失数据。
我无法找到方法。应用程序似乎必须继续使用Realm,否则用户将完全丢失其数据。
任何想法都将受到赞赏
答案 0 :(得分:3)
我不认为我完全理解你的问题是什么。如果你问是否有一个工具可以自动为你进行数据迁移,那么不,没有这样的工具。
否则它很直接:
在onCreate
课程的实施中处理onDowngrade
,onUpgrade
和SQLiteOpenHelper
方法。
在您的onCreate
方法中,创建表格后立即从 Realm 获取所有数据并插入到SQLite表格中。
这样的事情:
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
祝你好运埃姆雷