Kotlin 的可空性和 LiveData

2024-03-13

我想将 LiveData 与 Kotlin 一起使用,并且值不应为空。你如何处理这个问题?也许是 LiveData 的包装?在这里寻找好的模式.. 举个例子:

class NetworkDefinitionProvider : MutableLiveData<NetworkDefinition>() {
    val allDefinitions = mutableListOf(RinkebyNetworkDefinition(), MainnetNetworkDefinition(), RopstenNetworkDefinition())

    init {
        value = allDefinitions.first()
    }

    fun setCurrent(value: NetworkDefinition) {
        setValue(value)
    }
}

我知道访问时 value 不会为 null - 但我总是必须检查 null 或有这些丑陋的 !! 。


我进步不大answer https://stackoverflow.com/a/49324877/4059849幸运的编码员。此实现根本不能接受空值。

class NonNullMutableLiveData<T: Any>(initValue: T): MutableLiveData<T>() {

    init {
        value = initValue
    }

    override fun getValue(): T {
        return super.getValue()!!
    }

    override fun setValue(value: T) {
        super.setValue(value)
    }

    fun observe(owner: LifecycleOwner, body: (T) -> Unit) {
        observe(owner, Observer<T> { t -> body(t!!) })
    }

    override fun postValue(value: T) {
        super.postValue(value)
    }    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin 的可空性和 LiveData 的相关文章

  • 如何更改json对象名称(键)?

    只是一个简单的问题 如果我有一个包含 键 值 的 json 对象 如下所示 name value 我想将名称部分更改为其他名称 我该怎么办 我不想删除并重新创建它 鉴于以下情况 正确且紧凑的实施jsonObject是您引用的 json 对象
  • 无需发送消息即可获取 GCM 规范注册 ID

    我在使用 GCM 的应用程序时遇到问题 情况如下 该应用程序已安装 应用程序调用 GCM 注册方法获取注册 ID RID 1 该应用程序已卸载 再次安装该应用程序 应用程序再次调用 GCM 注册方法 获取注册 ID RID 2 在第 5 步
  • android 中的自定义 MediaPlayer 类

    我刚刚完成了一个项目 我使用网络视图进行视频播放 现在我被要求用自定义播放器替换 webview 部分 玩家应该能够处理 HLS 如果我使用VideoView和MediaController 我可以播放直播 但不幸的是 MediaContr
  • 设备管理员禁用

    如果不是 则无法卸载设备管理应用程序 禁用 用户可以从设置中禁用 设备管理员 当公司向员工提供 Android 设备时 公司希望 可以控制设备及其状态和策略 但用户可以 轻松摆脱这种控制 有谁知道这怎么可能 防止用户禁用设备管理员 谢谢 无
  • 使用自定义 cordova 插件未找到类异常

    我正在开发一个打印应用程序 它使用自定义 API 通过 USB 访问打印机 因此我需要一个自定义 Cordova 插件 我开始开发它 这是一个非常好的挑战 但目前也非常令人沮丧 因为我不明白为什么我的插件不能正确使用 事情是 1 插件安装正
  • 我在 Android studio 中遇到错误

    在此输入图像描述 https i stack imgur com bvqID png我是安卓新手 我刚刚在 android studio 中创建了一个项目 并且在它的中遇到了问题manifest xml 错误是在 android icon
  • 如何在状态栏显示通知?

    所以我在我的活动中创建了此通知 Notification n new Notification Builder getApplicationContext setContentTitle New mail from sender setCo
  • 如何在 API 级别 8 到 19 的 Android 设备上同时使用 DigitalClock 和 TextClock?

    我正在为 API 级别 8 到 19 的设备制作应用程序 其中包含时钟 我尝试将 DigitalClock 进行布局 我从 Eclipse 收到消息 该类自 API 级别 17 起已弃用 建议使用 TextClock 但是当我放置 Text
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • Android Studio 2.0 AVD 管理器中缺少 API 14 和 15

    在Android Studio中创建AVD时 列表中缺少API 14和15的系统映像 尽管我实际上在SDK管理器中安装了相应的SDK版本 我认为这个问题是在升级到Android Studio 2 0后出现的 如何为这些 API 版本创建 A
  • 使用 Gradle 在多个 Android 应用程序之间共享 Android 库

    我有 Android 应用程序 A 和 B 我想将每个应用程序中的重复代码提取到共享库 L 中 如何使用 Gradle 执行此操作 我之前见过这个问题的一些排列 但答案很少 最接近 最好的已问问题是这个 多个 Android 应用程序依赖于
  • 如何获取另一个应用程序的版本名称

    我想获取 Minecraft Pocket Edition 的版本名称 示例 0 13 0 b5 这是MCPE 我的世界袖珍版 的包 com mojang minecraftpe 我想要版本为String 我怎样才能做到这一点 我的获取包名
  • 如何在 android 中的 facebook、whatapp、instagram 和其他平台上分享推荐代码

    我有一个屏幕 用户可以通过该屏幕在 Facebook WhatsApp Twitter 和 Instagram 上分享推荐代码 我已经有一个 API 来生成推荐代码 现在我正在浏览branch io 文档 但我能找到的只是深层链接 我无法理
  • Android Studio SDK 安装程序在解压缩“platform-tools/systrace/NOTICE”时无限期挂起

    adb 无法从命令提示符处使用 设置了正确的路径 我认为平台工具的原始安装出现了问题 Studio 告诉我更新 但每次都会发生这种情况 我的机器上似乎缺少 adb exe this is the android studio event l
  • 支持的 Android 设备:0 台设备

    我们是 TourisMap 的开发商 我们不明白为什么在 Google Play 开发者控制台上上传 apk 后 我们支持 0 台设备 我们个人的想法是 Manifest 和 build gradle 都可以 我们可以生成 apk 然后我们
  • onLocationChanged 回调是在哪个线程上进行的?主 UI 线程?

    当在我的应用程序中进行此回调时 我有相当多的工作要做 通过 ORM 库和一些基于距离的计算读取和写入 SQL 数据库 当然 我担心不会阻塞主 UI 线程 因此我一直在尝试 未成功 找出这是否是进行回调的线程 如果是 我打算在回调发生时触发的
  • Android 调整图片大小

    我的图像存储在 SD 卡上 每个大小约为 4MB 我想调整每个的大小 而不是将其设置为 ImageView 但我不能使用BitmapFactory decodeFile path 因为异常 java lang OutOfMemoryErro
  • 如何创建带有两个日期选择器的自定义对话框?

    我刚刚开始学习 Android 作为一种爱好 我想创建一个带有两个日期选择器的对话框 final Dialog dialog new Dialog this dialog setContentView R layout data picke
  • 如何禁用 Google 请求许可定期检查手机上已安装的应用程序?

    我正在开发一个 Android 应用程序 因此我不断地在我的测试设备上构建和安装该应用程序 几天以来 我在每次构建 安装时都会提出一个问题 Google 可能会定期检查已安装的应用程序是否存在潜在危害 行为 在 Google 设置 gt 验
  • 除了前一个按钮意图之外,如何添加另一个按钮意图?

    这是我的代码 它包含一个名为的按钮button1A当我单击它时 它会打开一个名为的列表list1 如何为另一个名为 button2A 的按钮添加代码 该按钮将打开一个列表 List2 import android os Bundle imp

随机推荐

  • 尝试在 Windows 2016 Core 容器中创建计划任务时出错

    我正在尝试构建一个包含自定义计划任务的容器 这是我的 dockerfile FROM microsoft windowsservercore RUN schtasks create tn hello sc daily st 00 00 tr
  • PHP登录错误未定义索引

    我正在尝试使用此代码登录 session start require connect php username POST username password POST password if username password query
  • ErrorColumn 值不作为 Lineage ID 存在

    在插入目标表期间 发生的任何错误都会被重定向到错误表 我们可以在其中看到ErrorCode and ErrorColumn 问题是我们得到了一个值ErrorColumn它不存在于包中的任何地方 也就是说 没有一个列具有LineageID等于
  • 当我上传到服务器时相机图像发生旋转

    我要么拍照 要么从图库中选择一张照片 然后按应有的方式在 ImageView 中显示它 就旋转而言 但是 每当我将其上传到服务器时 它总是以横向模式上传 即使它在我的画廊中处于纵向模式 我该如何解决这个问题 private void tak
  • Rails 4 + Capistrano 3:致命:部署时无法从远程存储库读取

    我在使用 Capistrano 3 部署 Rails 4 应用程序时遇到以下错误 INFO 87512eb8 Running usr bin env chmod x tmp magnificent git ssh sh as email p
  • svn cleanup: sqlite: 数据库磁盘映像格式错误

    我试图做一个svn cleanup因为我无法在工作副本中提交更改 并且出现以下错误 sqlite 数据库磁盘映像格式错误 我现在能做什么 首先 打开command terminal在存储库根目录 具有 svn作为子文件夹 cd path t
  • 用于 ruby​​ gems 的新 10.9 OSX 的命令行工具?

    安装 OSX Mavericks 10 9 演示后 我在运行捆绑包后得到这个 Gem Installer ExtensionBuildError ERROR Failed to build gem native extension User
  • R - 根据每行的函数获取矩阵的列索引

    gt set seed 2014 gt m lt matrix sample 10 16 replace TRUE nrow 4 gt m 1 2 3 4 1 3 6 1 7 2 2 1 2 6 3 7 10 7 7 4 4 7 1 5 对
  • 将多行文本边框作为更多文本中的块

    我正在尝试在段落内的多行文本周围设置边框 我基本上不希望边框出现在每一行上 而是出现在所有行周围 我意识到我可以将所有文本包装在一个 div 中 但它会阻止该文本与段落的其余部分 我想要一个流畅的段落 并且对于多行中的一个句子 有一个顶部边
  • C++ 匹配文件中的字符串并获取行号

    我有一个包含前 1000 个婴儿名字的文件 我想询问用户一个名字 搜索文件 并告诉用户该名字对于男孩名字的排名以及女孩名字的排名 如果它不是男孩名字或女孩名字 它会告诉用户它不属于该性别的流行名字 该文件的布局如下 Rank Boy Nam
  • 使用私钥连接到服务器时 pysftp AuthenticationException

    我正在尝试连接到 SFTP 服务器 我有一个私钥和一个密码 我尝试阅读SO上的相关问题 但一直无法成功连接 这是我尝试过的 pysftp Connection host
  • django-rest-framework-gis 相关领域

    我有一个地理模型结构 其中多个事件可以具有相同的位置 class Event models Model name models CharField max length 128 blank True null True location m
  • 是否有任何方法或可能性来隐藏客户端提出的网络请求

    我已经在node js上创建了登录和注册端点 使用react js创建了用于登录和注册以及提交表单的必要表单和字段 将数据发布到服务器并获得正确的响应 在浏览器内的网络部分下 用户可以看到端点和用户提供的数据 用户名和密码 是否有可能向用户
  • 异常:集合被修改;枚举操作可能无法在设置项目中的窗体 Close 上执行

    我创建了一个用 C 4 0 构建的窗口窗体应用程序的安装项目 我在我的测试 PC 上测试了该设置 其中安装了 Vs 2010 Ultimate 并且运行良好 后来为了测试该应用程序 我将其安装在另一台没有 VS 的机器上 每次我尝试关闭表单
  • 从 C 语言的文本文件中读取逗号分隔值[重复]

    这个问题在这里已经有答案了 我对 C 编程非常陌生 这是作业的一部分 我正在尝试读取以下格式的逗号分隔文本文件 value1 value2 在 C 中并尝试将它们作为 string 和 int 参数传递到函数中 我尝试过使用 sscanf
  • Android:在 Flickr 上上传图片

    我必须制作一个 Android 应用程序来将图片从手机上传到 Flickr 我开始读书API Flickr 文档 http www flickr com services api 但仍然想了解如何进行身份验证以及如何上传 我也在这里阅读了类
  • MyBatis - jdbcTypeForNull Oracle

    我将 MyBatis 与 Oracle 11g R2 数据库结合使用 我正在使用 MyBatis 3 3 和 ojdbc6 12 1 0 2 我的问题是每当我尝试插入一个空对象时我都会得到以下信息 org springframework j
  • os.mknod() 在 MacOS 上失败?

    Is os mknod Mac 上的特权调用 总是失败 不允许操作 In 1 import os In 2 os mknod tmp test123 OSError Traceback most recent call last
  • 为什么 vscode 保存 java 文件时遇到问题?我应该检查哪个设置?

    在 vs code 中 我按 Ctr N 然后按 Ctr Shift S 这是 另存为 选项的排序方式 当我尝试将文件另存为 java 时 它会自动保存为类文件 当然 当我尝试不使用排序器保存文件时也会发生这种情况 因此创建 java 文件
  • Kotlin 的可空性和 LiveData

    我想将 LiveData 与 Kotlin 一起使用 并且值不应为空 你如何处理这个问题 也许是 LiveData 的包装 在这里寻找好的模式 举个例子 class NetworkDefinitionProvider MutableLive