我想 "插入记录到房间数据库" -> "Api调用" -> "更新本地记录"

问题描述 投票:0回答:1

我是一个新的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);

不胜感激

android android-room rx-java2 reactivex flatmap
1个回答
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());
                    }
                });
© www.soinside.com 2019 - 2024. All rights reserved.