由於某些原因(主要是大的apk大小,即使ABI分裂,無論如何)我需要完全刪除Realm並使用Sqlite而不會丟失數據。是否有可能從境界遷移到Sqlite?
我找不到方法。看起來應用程序必須繼續使用Realm,否則用戶將完全丟失數據。
任何想法可以理解
由於某些原因(主要是大的apk大小,即使ABI分裂,無論如何)我需要完全刪除Realm並使用Sqlite而不會丟失數據。是否有可能從境界遷移到Sqlite?
我找不到方法。看起來應用程序必須繼續使用Realm,否則用戶將完全丟失數據。
任何想法可以理解
我不認爲我明白你的問題是什麼完全。如果您問是否有一種工具可以爲您自動進行數據遷移,那麼不,沒有這樣的工具。
否則,它是相當直截了當:
手柄onCreate
,onDowngrade
和onUpgrade
方法在你SQLiteOpenHelper
類的實現。
在您的onCreate
方法中,在創建表之後,從領域獲取所有數據並插入到SQLite表中。
事情是這樣的:
Realm realm = Realm.getDefaultInstance();
RealmResults<MyClass> all = realm.where(MyClass.class)
.findAll();
for (MyClass instance : all) {
doInsert(instance);
}
其實我建議你看看how to reduce APK size在使用領域,但它是由你
編輯1 你將不得不作出確保你首先遷移數據,然後刪除Realm文件。儘管這不是讓你的APK變大的數據文件,而是Realm附帶的實際庫。所以爲此,不幸的是,必須採取兩個步驟:將數據遷移到SQLite的第一次發佈更新,並且在一段合理的時間(如一週)之後,您可以發佈將Realm庫完全取出的更新。希望它是有道理的。
據我所知(不知道)如果您使用默認的RealmConfig,Context.getFilesDir()
可以返回default.realm所在的文件夾。你不需要修改它們的權限。您可以在該文件夾下迭代文件以刪除它們。希望它有效。
PS:Apache的公地有很大FileUtils.java
好運
埃姆雷
請參閱我的回答如下,並考慮關閉的問題,如果答案滿足您 – bc004346
境界是唯一可以打開Realm文件,並且從Realm到SQLite的遷移將同時需要(以防止數據丟失)。 – EpicPandaForce
@EpicPandaForce可悲的是,這是這個問題的答案,謝謝。 – Blackkara