【问题标题】:android rxjava2 room get inserted object id in order to use it next queryandroid rxjava2 房间获取插入的对象 id 以便在下一个查询中使用它
【发布时间】:2018-05-25 09:04:16
【问题描述】:

我需要适当的方法将对象插入房间并通过 rxjava2 方式获取 rowId。例如:我有一个 Body 实体

    long insertBody(Body body);

在视图模型中

    Body body = new Body(contactId, msgText);
    getCompositeDisposable().add(
            Single.fromCallable(() -> getDataSource().insertBody(body))
                    .subscribeOn(getSchedulerProvider().io())
                    .observeOn(getSchedulerProvider().ui())
                    .subscribe(bodyId -> onContinueNewMessage(msgId, conversationId, bodyId,
                            forwardBodyId, replyMsgId, createdTimestamp), Timber::e)
    );

问题是如果我写 body 对象并在多个地方获取它的 rowId 怎么办?我需要一种通过 rxjava 方式插入正文并像 Single 一样返回的方法...提前致谢!

【问题讨论】:

    标签: android rx-java2 android-room


    【解决方案1】:

    您可以将 add() 中的代码合并到方法中。

    例如:

    public class Example {
        public static Single<Integer> insertBodySingle(Body body, DataSource dataSource) {
            return Single.fromCallable(() -> dataSource.insertBody(body));
        }
    
        public static Single<Integer> insertBodySingleThreaded(Body body, DataSource dataSource) {
            return insertBodySingle(body, dataSource)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread());
        }
    }
    

    然后你可以像这样使用它们:

    Example.insertBodySingle(body, dataSource).subscribe(bodyId -> )
    

    【讨论】:

    • 我猜,你的意思是这样Example.insertBodySingleThreaded(body, dataSource).subscribe(bodyId -&gt; )
    • 我需要一些更简洁的代码,其他 Android 开发人员有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2021-08-01
    • 2018-04-25
    相关资源
    最近更新 更多