热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MediatorLiveDataonChanged没有被调用

如何解决《MediatorLiveDataonChanged没有被调用》经验,为你挑选了1个好方法。

在我的应用程序中,我尝试使用MediatorLiveData收听实时数据的更改。由于涉及数据库操作,因此我使用像这样的执行程序服务。

    MediatorLiveData mediatorLiveData = new MediatorLiveData<>();
    appExecutors.diskIO().execute(() -> {
                    long id = contentDao.insert(content);
                    Log.i("LIVE", id + "");
                    LiveData cOntent= contentDao.getContentById(id);

                    mediatorLiveData.addSource(content, new Observer() {
                        @Override
                        public void onChanged(@Nullable Content content) {
                            Log.i("LIVE", "FIRED");
                        }
                    });

                });

首先,我尝试将新的内容对象插入数据库。我得到插入对象的ID,该对象在下一行中登录。我得到一些很好的身份证。之后,我使用id来查询相同的对象。查询返回一个LiveData。(如果此时使用content.getValue(),则为null。

然后,我使用收听此liveData中的更改MediatorLiveData。不幸的是,从未触发mediatorLiveData的onChange方法。因此,也不会打印日志。

这是我的内容道课

@Dao
public interface ContentDao {

    @Insert
    long insert(Content content);

    @Query("SELECT * FROM my_table WHERE id = :id")
    LiveData getContentById(long id);
}

我不明白我在做什么错。有人可以帮忙吗?谢谢!!

编辑:澄清一下,这就是代码的外观。

return new NetworkBoundResource(appExecutors) {
    @Override
    protected void saveCallResult(@NonNull CreateContent item) {
       //Something
    }

    @Override
    protected boolean shouldCall(@Nullable Content data) {
        //Something;
    }

    @Override
    protected LiveData createDbCall() {
        MediatorLiveData mediatorLiveData = new MediatorLiveData<>();
        appExecutors.diskIO().execute(() -> {
                    long id = contentDao.insert(content);
                    Log.i("LIVE", id + "");
                    LiveData cOntent= contentDao.getContentById(id);

                    mediatorLiveData.addSource(content, new Observer() {
                        @Override
                        public void onChanged(@Nullable Content c) {
                            Log.i("LIVE", "FIRED");                                                
                            mediatorLiveData.removeSource(content);
                            mediatorLiveData.postValue(c);
                        }
                    });

            });
        return mediatorLiveData;
    }

    @NonNull
    @Override
    protected LiveData> createCall() {
        //Something
    }
}.asLiveData();

该值返回给构造函数。

@MainThread
    public NetworkBoundResource(AppExecutors appExecutors) {
        this.appExecutors = appExecutors;
        result.setValue(Resource.loading(null));
        //TODO:: Add method to check if data should be saved. This should apply for search data.
        LiveData dbSource = createDbCall();
        result.addSource(dbSource, data -> {
            result.removeSource(dbSource);
            if (shouldCall(data)) {
                fetchFromNetwork(dbSource);
            } else {
                result.addSource(dbSource, newData -> setValue(Resource.success(newData)));
            }
        });
    }

小智.. 7

如前所述,您需要确保mediatorLiveData附加了活动的观察者。

如果您查看addSource方法,则在订阅源之前,它会检查是否连接了任何活动的观察者。

https://github.com/aosp-mirror/platform_frameworks_support/blob/d79202da157cdd94c2d0c0b6ee57170a97d12c93/lifecycle/livedata/src/main/java/androidx/lifecycle/MediatorLiveData.java#L95



1> 小智..:

如前所述,您需要确保mediatorLiveData附加了活动的观察者。

如果您查看addSource方法,则在订阅源之前,它会检查是否连接了任何活动的观察者。

https://github.com/aosp-mirror/platform_frameworks_support/blob/d79202da157cdd94c2d0c0b6ee57170a97d12c93/lifecycle/livedata/src/main/java/androidx/lifecycle/MediatorLiveData.java#L95


推荐阅读
  • 记一次线上环境的内存溢出(java.lang.OutOfMemoryError)
    事故背景今天客户说风控项目有个别用户查询不到数据不是报错就是一直卡在那里,我就去那个接口看了下。一看项目日志今天的都几个g了,平常也就几百兆吧ÿ ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 逆向工具之unidbg(在pc端模拟执行so文件中的函数)
      昨天在逆向某App的时候,发现有个加密工具类中的native方法是用C语言编写的,隐藏在so文件中。某大佬推荐逆向工具unidbg,能在pc端直接调用so文件中的函数,最终成功 ... [详细]
  • Androidgraphics:Howanalertwindowisdisplayed?一、initilizationanddatastructure.AlertDialoginh ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
author-avatar
可燕戏天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有