每次 Retrofit 调用的值更改时,Android 都会通知
Posted
技术标签:
【中文标题】每次 Retrofit 调用的值更改时,Android 都会通知【英文标题】:Android notify every time the value on Retrofit call changes 【发布时间】:2022-01-02 02:16:44 【问题描述】:正如标题一样,我希望能够在每次 Retrofit 调用的值发生变化时通知我。在onCreate()
中只调用一次此代码是否可行?场景是这样的。我制作了一款 RPG 游戏。例如,希望在应用程序启动时通知特定用户的黄金数量(这可行)。然后用户杀死了一个怪物并获得了一些金币(又一次进行了改造调用),所以服务器上的金币数量发生了变化,现在我也想得到通知(这里是它不起作用的地方)。
API接口:
@GET("/getGold")
Observable<String> getGold(@Query("name") String name);
活动:
@Override
protected void onCreate(Bundle savedInstanceState)
(...)
Api.getClient1Or2().getGold("Admin")
.subscribeOn(Schedulers.io())
.observeOn(androidSchedulers.mainThread())
.subscribe(string -> Log.d("string", string));
那么如何修改这段代码呢?
提前谢谢你!
【问题讨论】:
您可能想研究使用 WebSockets,以便服务器可以推送更改。像这样使用休息,您可以进行轮询更改,向 GET 端点发出一大堆请求。 【参考方案1】:即使getGold
是Observable
,它也只会运行一次请求并发出一个项目。
您需要从您的WebSocket
消息中接收Gold
(首选),或者使用WebSocket
消息作为触发器,通过再次订阅getGold
来刷新Gold
(不是首选,因为您可以发送您的Gold
直接在您的WebSocket
消息中)。
当然,您需要您的后端为您公开一个WebSocket
端点,并使用不断更新您的Gold
的合同。
您也可以使用推送通知作为刷新的触发器,但它们有配额,并且无论如何它们都是基于 WebSockets 构建的。
【讨论】:
以上是关于每次 Retrofit 调用的值更改时,Android 都会通知的主要内容,如果未能解决你的问题,请参考以下文章
Java.lang.IllegalStateException:应用程序PagerAdapter更改了适配器的内容而不调用PagerAdapter#notifyDataSetChanged andro