2

私は、開発中の Android アプリでレルム Java を非常にうまく使用しています。私はサーバー API から配列を受け取り、レルムはメインのレルム インスタンス オブジェクトJSONObjectの便利な方法で配列を忠実に取り込みます。createOrUpdateAllFromJson

この典型的なフローは次のようになります。

// get API results into JSONArray jsonObjArrs variable
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
realm.commitTransaction();

ただし、特定のユースケースが完了したらすぐにこれらを破棄したいため、実際にはレルムに保存せMyCoolModelに、同じオブジェクトの一時的なメモリ内配列を作成したい状況に遭遇しました。 . 私には似ていて、その兄弟メソッドはメインレルムインスタンスオブジェクトでのみ利用できます。createOrUpdateAllFromJson

これをオブジェクト モデルの作成者にとって便利な方法で利用する方法はありJSONますか? または、手動/自動の JSON 解析を使用して別の実装を作成する必要がありますか?

4

3 に答える 3

1

途方もなくハックな解決策は

realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
List<MyCoolModel> list = realm.copyFromRealm(realm.where(MyCoolModel.class)).findAll());
realm.cancelTransaction();
return list;

しかし、LoganSquare (または GSON/Moshi/etc) を使用したほうがよいでしょう。

于 2016-12-01T14:09:24.227 に答える
0

レルムの「メモリ内レルム」機能を使用することになりました。新しい UUID を名前として、新しいメモリ内レルム インスタンスを返す単純な関数を作成しました。

public Realm unpersistedRealm(){
    RealmConfiguration myConfig = new RealmConfiguration.Builder()
            .name(UUID.randomUUID().toString())
            .inMemory()
            .build();
    return Realm.getInstance(myConfig);
}

私はこれを、データを捨てる目的のためだけに個別に作成されたインスタンスとして使用します。通常のinMemoryRealmInstance.createOrUpdateAllFromJson()呼び出しを使用してオブジェクトを作成し、完了したらインメモリ インスタンスを閉じます。フラグメントのonCreateView()呼び出し中にインスタンスを作成し、 でレルムを閉じonDestroyView()ます。

(メモリ内インスタンスではありますが) realm を使い続けることで、次の明確な利点が得られます。

  • MyCoolModelキーフィールドで @PrimaryKey を使用して構築された重複排除。以前に考えていた手動のアプローチを使用する場合、手動ArrayList<MyCoolModel>で重複を除外する必要があり、Realm によって既に解決されている他の問題について心配する必要があります。
  • クエリベースの並べ替え、フィルタリングなど
于 2016-12-02T16:04:08.680 に答える