【问题标题】:I want to "insert record to room database" -> "Api call " -> "Update local record"我想“将记录插入房间数据库”->“Api 调用”->“更新本地记录”
【发布时间】:2020-09-26 17:51:37
【问题描述】:

我是 rxjava android 的新手。我想在本地房间数据库中插入记录。我将自动生成设置为 true,因此它会为我生成 id。然后我想调用 api 将该记录发送到服务器。在 api 调用成功后,我想使用从服务器获取的 serverId 更新本地数据库中先前添加的记录。我知道我可以使用 rxjava flatmap 实现这个序列,但我不知道如何。

这是我的插入方法,它返回 id

@Insert
Single<Long> insertMessage(ChatMessage chatMessage);

这是我的 api 调用

@POST(ApiConstants.API_CHAT_SEND_MESSAGE)
Single<SendMessageResponse> sendChatMessage(@Body PostChatMessage postChatMessage);

这是我的更新方法

@Query("UPDATE message SET id = :id WHERE localId = :idToUpdate")
Single<Integer> updateMessage(String id, int idToUpdate);

任何帮助将不胜感激

【问题讨论】:

  • 您使用flatMap 的想法是正确的。你试过了吗?
  • 不确定是否可以使用 flatmap 实现这一点,或者我需要链接操作。我在 rxjava 中也不是很清楚。我试图编写代码,但它给出了错误
  • 您还可以监听数据库更改,然后找出那些没有serverId 的更改并发出请求,因为请记住,您可以在离线时添加到数据库中,并且这里最好将Rx链分开来辨别是添加到数据库失败还是网络请求失败。不过,您可能想在这里重新发明轮子,您看过 github.com/dropbox/Store 了吗?

标签: android android-room rx-java2 reactivex flatmap


【解决方案1】:

我厌倦了这种方式,它工作正常并给了我预期的结果

 messageDao.insertMessage(chatMessage)
                .subscribeOn(Schedulers.io())
                .flatMap(id -> {
                    return ApiServiceClient.getApiServiceNew().sendChatMessage(postChatMessage).flatMap(sendMessageResponse -> {
                        messageDao.updateMessage(sendMessageResponse.getData().getId(), id);
                        return Single.just(id);
                    });
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new SingleObserver<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onSuccess(Long aLong) {
                        Log.d(TAG,"Record updated"+aLong);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG,"Record Failed"+e.getMessage());
                    }
                });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多