每次 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】:

即使getGoldObservable,它也只会运行一次请求并发出一个项目。

您需要从您的WebSocket 消息中接收Gold(首选),或者使用WebSocket 消息作为触发器,通过再次订阅getGold 来刷新Gold(不是首选,因为您可以发送您的Gold 直接在您的WebSocket 消息中)。

当然,您需要您的后端为您公开一个WebSocket 端点,并使用不断更新您的Gold 的合同。

您也可以使用推送通知作为刷新的触发器,但它们有配额,并且无论如何它们都是基于 WebSockets 构建的。

【讨论】:

以上是关于每次 Retrofit 调用的值更改时,Android 都会通知的主要内容,如果未能解决你的问题,请参考以下文章

Java.lang.IllegalStateException:应用程序PagerAdapter更改了适配器的内容而不调用PagerAdapter#notifyDataSetChanged andro

每次分析结束时如何更改文本文件特定部分的值?

如何在每次加载页面时更改 php 变量的值? [复制]

如何更新显示的值而不是每次在 Python 中打印?

每次更改页面时都会调用 React useEffect (with []) (React Router)

[CentOS 7系列]变量