liujingxing / rxhttp

🔥🔥🔥 Based on OkHttp encapsulation, support Kotlin Coroutines、RxJava2、RxJava3; 30s to get started.
https://juejin.im/post/5ded221a518825125d14a1d4
Apache License 2.0
3.74k stars 457 forks source link

如何修改缓存内的数据 #455

Closed ly469097645 closed 10 months ago

ly469097645 commented 1 year ago

作者您好,我想咨询下,我的App需要支持离线使用,就比如说是流程类的业务,在列表已经缓存到数据的情况下,对列表的某条数据进行状态的更新,这时候需要将修改后的数据替换到已有的缓存中,不管什么时候打开都是展示修改后的状态,直到网络恢复时提交到服务端,这种情况下要怎么取出缓存并且进行缓存的更新

liujingxing commented 1 year ago

你需要自己构建Okhttp3.Response对象,随后通过RxHttpPlugins.getCache().put(Response,String)方法,覆盖原有的缓存

ly469097645 commented 1 year ago

有这个对象构建的案例可以参考吗,然后是不是构建出这个对象后,第二个参数用同一个key就能实现覆盖

liujingxing commented 1 year ago

https://github.com/liujingxing/rxhttp/blob/4d502f3b81adaa0c7af80d9ccf428a41e0cc7fa0/rxhttp/src/main/java/rxhttp/wrapper/cache/CacheManager.java#L631

ly469097645 commented 1 year ago

好的,我参考下,谢谢您

ly469097645 commented 1 year ago

不好意思,再打扰下,就是构建这个对象需要多个参数,在我自己直接构建的时候这些参数要从哪获得才是正确的参数

liujingxing commented 1 year ago

把CacheManager看懂

liujingxing commented 1 year ago

但我还是建议你换个思路,你这个需求感觉就不合理

ly469097645 commented 1 year ago

这个应用因为要进山里,存在山里没网络的情况,所以需要在本地先修改已经获取到的任务的状态等数据并更新UI,等到网络恢复的的时候进行提交 我是考虑用您的库自带的缓存然后来修改缓存数据实现,如果无法实现我可能考虑自己做本地数据库来维护这个数据

liujingxing commented 1 year ago

服务器返回的数据,修改后,重新提交给服务器?你这个修改指的是用户修改数据?比如修改EditText里的内容,然后保存起来?如果是这样,建议你自己维护这个数据还更简单,毕竟也就一个对象的事。自带的缓存,能实现这个需求,但实现起来确实不太方便。

ly469097645 commented 1 year ago

对,比如这个列表的数据,当前是待处理,然后需要把这个任务处理了之后,把状态修改为已处理 ,正常的APP是修改后直接提交服务器,但是需求是在山里没网络的时候,要本地先把这些个字段修改好了展示(退出页面再进来也需要展示修改后的,就需要改缓存数据了),等到网络好了进行提交,所以再考虑用自带的缓存还是自己做数据库来保存,如果缓存不方便就自己实现了

liujingxing commented 1 year ago

如果只是更改一个状态,也没必要用数据库了,用SP就够了

ly469097645 commented 1 year ago

嗯嗯,我是打个比方,因为可能存在一整个列表都要去改之类的,具体是用sp还是数据库等需求确定了再看,主要是看大神的这个库太好用了,就想着说能不能在这个基础上直接改,想偷懒下

liujingxing commented 1 year ago
val cacheKey = "自定义cacheKey"
val request = RxHttp.postForm(".../...")
    .add("", "")
    .setCacheKey(cacheKey)
    .buildRequest()

//1、取出缓存
val response = RxHttpPlugins.getCahce().get(request, cacheKey)

//2、自己修改response

//3、重新写入缓存
RxHttpPlugins.getCahce().put(response, cacheKey)

如果要实现,大概就这么个逻辑