视图模型不断创建实时数据实例

2023-12-09

我在中创建了视图模型的实例onCreate活动的方法。

    ticketViewModel = ViewModelProviders.of(this).get(TicketViewModel.class);

那我有一个方法,AddTicket,它使用viewModel点击服务并响应viewModel我忽略加载动画。

 public void addTicket(View view){

     ticketViewModel.AddTicket(id).observe(this, response ->{
                        dismissLoadingAnimation();
    } 

现在添加票证后,用户可以抑制Add Ticket按钮,以及addTicket()方法将被再次调用。

但这一次observerViewModel 中定义的对象被调用 2 次,导致 2 次网络调用,以及 2dismissLoadingAnimation执行。

如果我继续按addTicket按钮,里面定义执行观察者的数量ViewModel保持增加。

这是我的视图模型代码。

public class TicketViewModel extends AndroidViewModel implements IServiceResponse {

    MutableLiveData<String> mObservableResponse = new MutableLiveData<String>();


    public MutableLiveData AddTicket(String id){

        JsonObject jsonObject= new JsonObject();
        jsonObject.addProperty("id",  id);

        NetworkUtility networkUtility= new NetworkUtility(this, ADD_TICKET);
        networkUtility.hitService(URL, jsonObject, RequestMethods.POST);

        return mObservableResponse;
    }


     @Override
        public void onServiceResponse(String response, String callType){

        if(serviceTag.equalsIgnoreCase(ADD_TICKET)){    
             mObservableResponse.setValue("success");
        }
    }

}

里面定义的执行观察者的数量ViewModel保持增加,因为每次点击您都会注册新的观察者。你不应该注册观察者onClick() method.

你应该这样做onCreate()你的方法Activity or in onViewCreated你的片段的方法。如果你这样做,就没有必要removeObserver当你完成工作时。Lifecycle机制将为您覆盖。

但如果你真的想回答你的问题,这就是你可以做到的

yourViewModel.yourList.removeObservers(this)

Passing this意味着通过你的Activity,或者还有第二种方法:

yourViewModel.yourList.removeObserver(observer)

val observer = object : Observer<YourObject> {
    override fun onChanged(t: YourObject?) {
        //todo
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视图模型不断创建实时数据实例 的相关文章

随机推荐

  • Spark 流不记得以前的状态

    我编写了带有状态转换的 Spark Streaming 程序 看来我的 Spark 流应用程序正在通过检查点正确地进行计算 但是 如果我终止程序并再次启动它 它不会读取之前的检查点数据并从头开始 这是预期的行为吗 我是否需要更改程序中的任何
  • 原生IOS设置远程视频描述发送参数失败

    这是 sdpOffer offer v 0 o 1514366952141741 1 输入 IP4hostx s 安装点 99 t 0 0 a 组 捆绑视频 a msid 语义 WMS janus m 视频 9 UDP TLS RTP SA
  • 将一个 TLD 的所有页面重定向到另一个 TLD

    今晚我简直要抓狂地想弄清楚这个问题了 我希望有人能帮助我 我的网站有 3 个 TLD 类似于以下内容 www domain com www domain org www domain net 它们都位于同一目录中 我想设置 301 重定向
  • PHP 开放时间 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有一个客户想要一家在线披萨店 当然 他也不希望顾客在营业时间之后下订单 我为此制作了一个简单的脚本 我想我将来可能会与任何想要的人分享
  • DES、三重 DES、AES、河豚数据加密的比较

    有人比较这些加密算法的优缺点吗 Use AES 更详细地说 DES 是七十年代的旧 数据加密标准 它的密钥大小对于适当的安全性而言太短 56 个有效位 这可以被暴力破解 正如已经证明的那样十多年前 此外 DES 使用 64 位块 这在使用相
  • 使用 SharedPreferences 设置登录状态并在应用程序启动时检索它 - Flutter

    我有一个 flutter 应用程序 在该应用程序启动时我必须检查登录状态并相应地调用相关屏幕 用于启动应用程序的代码 class MyApp extends StatefulWidget override MyAppState create
  • 左外连接与 Entity Framework Core

    我正在尝试使用 EF7 7 0 0 rc1 final vNext RC1 rc1 final 和 SQL Server 2014 执行左外连接请求 数据库 宠物 身份证 姓名 用户 ID 姓名 PetId 这个有效 var queryWo
  • ASP.NET Core 中基于令牌的身份验证(已更新)

    我正在使用 ASP NET Core 应用程序 我正在尝试实现基于令牌的身份验证 但不知道如何使用新的保安系统 我的场景 客户端请求令牌 我的服务器应该授权用户并返回 access token 客户端将在以下请求中使用该令牌 这里有两篇关于
  • 具有格式相关类型的柯里化函数

    据我所知 F 不像处理其他函数那样处理 printfn 因为它依赖于字符串参数的类型 有人可以向我解释为什么这会阻止我这样做吗 let printn printfn A 该错误表示类型被推断为 a gt unit 我需要添加显式参数或类型注
  • 使用Friendly_id匹配单个Rails路线中的多个模型

    我有一个公司和一个用户模型 两者都有一个通过Friendly id 的slug 确保两种模型中的段头都是唯一的 我想要网址 http www example com any company name http www example com
  • Google 地图 API 路线

    我可以在应用程序中的谷歌地图上标记两个点 然后计算地图上的方向以及逐向导航吗 我正在创建一个应用程序 用于获取两点之间的行驶方向在地图上 一步一步 step1首先创建一个类MyOverlay java用于绘制路径 import androi
  • phpmyadmin 出现奇怪的错误,安装成功但仍然无法运行

    我一整天都在努力安装 phpmyadmin 我已经尝试重新安装很多次了 但还是不行 打开 localhost phpmyadmin 时 我收到一些文本 而不是实际的 phpmyadmin UI 正文是 addJSON options PMA
  • 如何在 Web midi api 中发现 midi 键盘?

    参考 2013 年的浏览器支持 Web MIDI API 我目前正在 OS 10 9 2 上运行 Chrome 34 0 1847 116 并尝试使用 Web Midi API 启用 chrome flags enable web midi
  • Perl正则表达式匹配较长句子中的可选短语

    我正在尝试匹配句子中的可选 可能存在 短语 perl e word1 word2 word3 print 1 1 2 2 3 3 n if m word1 word2 word3 Output 1 word1 2 3 word3 我知道第一
  • 使用 Coldfusion 上传时存储文件名

    我正在尝试将要上传的所选文件的文件名存储到表单上的隐藏输入字段中 我的表格看起来像这样
  • 如何手动更新实体框架代码优先模型,以便它更新数据库(使用新列)?

    有人可以告诉我如何将数据成员 col 添加到我的 mvc3 模型 类 并让它更新数据库 而不必从头开始生成所有内容 我首先从代码开始工作 当我更改模型然后运行我的项目时 我收到一条错误消息 指出模型已更改 有什么干净简单的方法来同步创建新的
  • std::使用整数数组中的元素作为 std::variant 中的目标类型从 std::variant 获取内容

    我有一个整数数组来检索 std variant 中的内容 但是编译失败 报错信息No matching function to call get 您能否解释原因并提出实现相同目的的可行解决方案 using my type std varia
  • 显示实时页面查看者数量[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 javascript 或 php 统计网站当前访问者 我的网站上有一个嵌入式流 但我想提取页面上实时观看者的数量 有没有一种方法可以使用 PHP AJAX 来执行此操作 显示当前正在查看我的
  • 从 C#(非 C)COM 组件加载和传递 JScript 数组

    我看过有关 jscript 数组的教程 但还没有看到 我看到类似的问题 但涉及 Win32 代码而不是 NET 想知道如何在 JScript 和 C COM 组件之间来回传递数组 例如 我在 C COM 中定义了两个属性 它们返回字符串和整
  • 视图模型不断创建实时数据实例

    我在中创建了视图模型的实例onCreate活动的方法 ticketViewModel ViewModelProviders of this get TicketViewModel class 那我有一个方法 AddTicket 它使用vie