2017-05-26 28 views
2

由於某些原因(主要是大的apk大小,即使ABI分裂,無論如何)我需要完全刪除Realm並使用Sqlite而不會丟失數據。是否有可能從境界遷移到Sqlite?

我找不到方法。看起來應用程序必須繼續使用Realm,否則用戶將完全丟失數據。

任何想法可以理解

+0

請參閱我的回答如下,並考慮關閉的問題,如果答案滿足您 – bc004346

+1

境界是唯一可以打開Realm文件,並且從Realm到SQLite的遷移將同時需要(以防止數據丟失)。 – EpicPandaForce

+0

@EpicPandaForce可悲的是,這是這個問題的答案,謝謝。 – Blackkara

回答

3

我不認爲我明白你的問題是什麼完全。如果您問是否有一種工具可以爲您自動進行數據遷移,那麼不,沒有這樣的工具。

否則,它是相當直截了當:

  1. 手柄onCreateonDowngradeonUpgrade方法在你SQLiteOpenHelper類的實現。

  2. 在您的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庫完全取出的更新。希望它是有道理的。

+0

感謝您的幫助,但問題很明確,並表示「我需要徹底刪除Realm並使用Sqlite而不會丟失數據。」在我的下一個應用程序更新中,Realm將被完全刪除,所以上面的代碼將不起作用。 @ EpicPandaForce的評論正是我想學的東西 – Blackkara

+0

「必須採取兩個步驟:將數據遷移到SQLite的第一次發佈更新,並且在一段合理的時間(如一週)之後,您可以發佈將Realm庫完全取出的更新」這對我來說似乎是最相關的方式(但不好),謝謝。 – Blackkara

+0

很高興我能幫到你。請考慮以回答的方式結束問題。 – bc004346

1

據我所知(不知道)如果您使用默認的RealmConfig,Context.getFilesDir()可以返回default.realm所在的文件夾。你不需要修改它們的權限。您可以在該文件夾下迭代文件以刪除它們。希望它有效。

PS:Apache的公地有很大FileUtils.java

好運

埃姆雷