【问题标题】:How to update RealmObject inside RealmObject properties?如何在 RealmObject 属性中更新 RealmObject?
【发布时间】:2018-09-13 19:05:26
【问题描述】:
Message extends RealmObject{
Attachment attachment;
}

Attachment extends RealmObject{
int state;
}

我想更新附件中的状态。我遵循了这样的路径:

RealmResults<Message> allMessages = mRealm.where(Message.class)
                .isNotNull("attachment")
                .in("attachment.state", new Integer[]{INTERRUPTED,PENDING})
                .findAll();

if (allMessages != null && allMessages.size() > 0) {
    for (Message message : allMessages) {
        Attachment attachment = message.getAttachment();
        attachment.setState(IDLE);
    }
}

有没有办法通过直接附件更新状态?

【问题讨论】:

    标签: android realm insert-update


    【解决方案1】:

    嗯。

    try(Realm r = Realm.getDefaultInstance()) {
        r.executeTransaction((realm) -> {
            RealmResults<Attachment> attachments = realm.where(Attachment.class)
               .in("state", new Integer[]{INTERRUPTED,PENDING})
               .findAll();
            for(Attachment attachment: attachments) {
                attachment.setState(IDLE);
            }
        });
    }
    

    【讨论】:

    • Message 对象中是否找到所有附件? where 子句是真的吗? RealmResults&lt;Attachment&gt; attachments = realm.where(Attachment.class) .in("attachment.state", new Integer[]{ INTERRUPTED,PENDING}).findAll();
    • 您可能需要解释以下内容:1.) 为什么 Attachment.state 不只是 Message 中名为 attachmentState 的字段和 2.) 为什么 Attachment 不属于一个消息? - - - 您的架构可能不完整,因此我们无法正确了解您要解决的问题。
    • 有些消息对象只有文本,有些对象有附件。附件有进度状态。
    • 因为我无法确定您的mRealm 是在哪个线程上创建的:D
    • 我不知道您需要多个进程来做什么,也看不到您的配置。它也与此评论部分无关,因此我将在此处停止回复。 可能正在考虑后台 线程,所以不,您需要做的只是将所有 DB 写入的初始化移动到仅由 BaseActivity“启动”在 onCreate() 启动时,static boolean 标志为 false(启动任务后您将其设置为 true)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多