2017-09-05 22 views
2

私のアプリはREST APIからデータを取得します。
エンドポイントによっては、完全または部分のリストAccountが表示されます。
APIが応答すると私はrealm.copyToRealmOrUpdate(accounts)に電話します。RealmObjectを部分的に更新することは可能ですか

私の問題は、完全なaccountがすでに領域に格納し、同じ部分accountしかしrelation_txrelation_rxmessage_last_rxmessage_last_txあるnullaccountsリストにある場合、完全なaccountが完全に上書きされている場合。

nullではないフィールドを更新するのは、レルムだけです。 提案がありますか?

どのようにしてAccount.update()メソッドをオーバーライドできますか?

@RealmClass 
public class Account extends RealmObject { 

    public String timestamp; 

    @PrimaryKey 
    public long id; 

    public String name; 

    public String email; 

    public Relation relation_tx; 

    public Relation relation_rx; 

    public Message message_last_rx; 

    public Message message_last_tx; 
} 
+0

「関係」とは何ですか、なぜそれが存在しますか? – EpicPandaForce

+0

'Relation'は別のアカウントとの関係を定義するオブジェクトに過ぎません。 –

+0

私は手動で' if(x!= null)obj.setX(x) 'アプローチを推奨します。こんにちはフランク、 – EpicPandaForce

答えて

1

手動で比較する必要があると思います。サーバーからの内容でrealm.copyToRealmOrUpdate(accounts)に電話しないでください。

代わりに、サーバーの応答にserverAccountsという名前を付けます。そのアカウント内のすべてのアカウント:このIDを持つアカウント(localAccount)をRealmから取得します。見つからない場合(null):serverAccountをDBに追加します。見つかった場合:localAccountで4つのフィールドを手動で更新し、localAccountをDBに保存します。

上記を最適化するには、(serverAccountsの)idsのリストを含む単一のRealmクエリを実行し、変更を1つのバッチにRealmに保存することもできます。

+0

。私はそれについてすでに考えていましたが、別の解決策があることを願っています。 –

+0

こんにちは。私が知っていることではありません。あなたが見つけたら教えてください。 – Frank

+0

'createOrUpdateAllFromJson()'を使うことができます。すべてのjsonメソッドは、実際に存在するフィールドのみを更新します。 –

関連する問題