2017-05-26 6 views
2

何らかの理由で(主にABI分割でも大規模なapkサイズでも)、Realmを完全に削除し、データを失うことなくSqliteを使用する必要があります。レルムからSqliteに移行することは可能ですか?

私は道を見つけることができませんでした。アプリはRealmを使用し続ける必要があります。そうしないと、ユーザーはデータを完全に失うことになります。

ご了承ください。

+0

があり、以下の私の答えを見て答えが – bc004346

+1

レルムが唯一のものであるあなたを満たしている場合、質問を閉じてご検討くださいRealmファイルを開くことができます。また、RealmからSQLiteへの移行は、同時に(データ損失を防ぐために)両方を必要とします。 – EpicPandaForce

+0

@EpicPandaForce残念ながら、これはこの質問の答えです。ありがとうございます。 – Blackkara

答えて

3

私はあなたの問題が何であるか完全に理解しているとは思いません。データ移行を自動化するツールがあるかどうかを尋ねる場合は、いいえ、そのようなツールはありません。

それ以外の場合は、かなり単純です:あなたSQLiteOpenHelperクラスの実装で

  1. ハンドルonCreateonDowngradeonUpgrade方法。あなたのonCreate方法で

  2. 、あなたがテーブルを作成した直後、レルムからすべてのデータを取得し、SQLiteのテーブルに挿入。

このような何か:

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

私は実際にレルムを使用しているときにhow to reduce APK sizeに見えることを示唆しているが、それはあなた次第あなたが行う必要があります

EDIT 1 ですまずデータを移行してから、レルムファイルを削除してください。これは、APKを大きくするデータファイルではなく、Realmに付属の実際のライブラリです。残念なことに、残念ながら、データをSQLiteに移行する最初のリリースの更新を行い、妥当な時間(1週間の後)にRealmライブラリを完全に解放する更新をリリースすることができます。それが理にかなってほしい。

+0

参考にしていただきありがとうございますが、質問は明確で、「Realmを完全に削除し、データを失うことなくSqliteを使用する必要があります」と述べています。私の次のアプリのアップデートでは、Realmが正確に削除されるので、上記のコードは機能しません。 @ EpicPandaForceのコメントはちょうど私が – Blackkara

+0

を学びたいと思っただけです "2つのステップを取らなければなりません:SQLiteにデータを移行する最初のリリースアップデート、そしてある程度の妥当な時間(1週間の後)これは私にとって最も関連性の高い方法です(しかし悪い)、ありがとう。 – Blackkara

+0

うれしい私は助けることができます。質問を答えとして閉じてください。 – bc004346

1

デフォルトのRealmConfigを使用している場合は分かりますが、Context.getFilesDir()はdefault.realmのあるフォルダを返すことができます。それらを変更する権限は必要ありません。このフォルダーの下のファイルを反復して削除することができます。それがうまくいくことを望みます。

PS:Apacheの-コモンズは素晴らしいFileUtils.java

幸運

エムレ

関連する問題