前言

现在有很多Android开发的小伙伴使用Kotlin开发应用了,今天小编在使用Kotlin开发的时候遇到个问题,就是在TextView赋值时候出现了java.lang.IllegalStateException: tv must not be null的错误,就有点纠结为什么为空。

代码

import android.annotation.SuppressLint
import android.app.DatePickerDialog
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity() {@SuppressLint("SetTextI18n")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val time = findViewById<TextView>(R.id.tv)btn.setOnClickListener {DatePickerDialog(this).run {show()setOnDateSetListener { datePicker, _, _, _ ->tv.text = datePicker.year.toString() + (datePicker.month + 1) + datePicker.dayOfMonth}}}}
}

正常的代码逻辑是没有错误的,但是意外就发生了,在选中日期的进行数据回调就炸了。于是我稍微做了点改变

tv?.text = datePicker.year.toString() + (datePicker.month + 1) + datePicker.dayOfMonth

修改成这样,没有报错,但是也没有赋值。很难受,一直没有搞定为什么没有赋值,为什么没有爆错。[黑人问号]

解决的办法

我一直摸不着头脑,我出错的地方在哪里。有幸请教一位大佬,大佬原话如下:

使用kotlinx.android直接使用控件id时要注意,如果是在dialog, fragment等对象的run 或apply里面,使用控件id,它调用的是this即dialog或fragment里的,也就是它是在dialog或fragment里去找这个id对应的控件,而不是外面的activity,所以会出现这个控件为空。

你可以在外面声明个临时变量,比如
val date = tv
然后在里面使用date而不是tv
或者使用let之类的方法而不是run或apply

解决问题之后的代码

    @SuppressLint("SetTextI18n")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val time = findViewById<TextView>(R.id.tv)btn.setOnClickListener {DatePickerDialog(this).run {show()setOnDateSetListener { datePicker, _, _, _ ->time.text = datePicker.year.toString() + (datePicker.month + 1) + datePicker.dayOfMonth}}}}

我初始化的组件之后,我在dialog里面找到这个组件,然后在activity中赋值成功。成功解决了上面说的问题,很感谢大佬的指导。下面是大佬的博客,Android开发的小伙伴可以关注他。

大佬的博客

主页传送门https://me.csdn.net/maosidiaoxian

AndroidKotlin笔记——TextView赋值出现java.lang.IllegalStateException: tv must not be null相关推荐

  1. Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]

    一:运行test类方法时候报错 报错 java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. S ...

  2. 报错 java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify @Bootstra

    由于我maven仓库之前已经有了有个5.0.10的test包 导致我的变量 <org.springframework.version>4.2.5.RELEASE</org.sprin ...

  3. spring boot:java.lang.IllegalStateException异常

    1.单元测试报错: java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify @B ...

  4. ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked

    ES出现异常: failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not lo ...

  5. 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案

    在使用ViewPager的时候遇到一个错误java.lang.IllegalStateException: The specified child already has a parent. You ...

  6. java.lang.IllegalStateException

    java.lang.IllegalStateException: Optional int parameter 'usid' is present but cannot be translated i ...

  7. 解决autojs报错:Wrapped java.lang.IllegalStateException: image has been recycled 。

    用autojs写了一个截图,判读色块位置并点击的代码,运行出错.报错如下: 0:37:17.386/E: Wrapped java.lang.IllegalStateException: image ...

  8. java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction. in /U

    错误内容如下 java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction ...

  9. 批量下载的实现及java.lang.IllegalStateException异常

    在工作流的一张表单里可能会有多个步骤上传附件,在用户的待办中往往会存在多条带有附件的任务,如果一一打开并且点击下载链接下载,不仅费时,而且繁琐,用户体验较差. OA系统采用的是FastDFS做为文件服 ...

最新文章

  1. React for循环渲染组件
  2. 剑指offer:扑克牌顺子
  3. VTK:Texture之TextureCutSphere
  4. 米其林全球挑战赛电子门票欣赏
  5. java 迁移数据_从迁移到Java 7的小技巧
  6. Camel:构建基于消息的应用程序
  7. 12306订票助手java_12306订票助手
  8. 10个Bug环环相扣,你能解开几个?
  9. Reporting Service RDLC 数据换行解决方案
  10. Android APK XML解析与反编译方法
  11. 思科软件服务器怎么作用,Cisco设备如何应用应用TFTP服务器
  12. 给初学者:用VB写外挂 ———— 实战一:动手写一个红色警戒金钱锁定工具
  13. 不登陆路由器查询路由器IP地址和物理地址
  14. 在 python 中使用 Selenium 报错self.capabilities = response['value'] KeyError: 'value'的解决办法
  15. 2021年需要关注的15大软件测试趋势(一)
  16. Redis 核心知识——01
  17. 集线器、中继器、网桥、交换机、网关、路由器——今天必把你们区分开
  18. 编程中的英语单词大全
  19. 云服务器能共享文件夹,云服务器能共享文件夹
  20. go 进阶 多路复用支持: 一. netpoller 初始化

热门文章

  1. 【转贴】公务员考试:逻辑推理测试辅导
  2. RxJava 2.x 优秀学习资源
  3. java 记事本界面_JAVA/GUI程序之记事本
  4. AMD于2022年完成并购赛灵思XILINX,7系列产品生命周期延长至2035年
  5. 用DGAN生成mnist图片以及动漫头像图片
  6. linux默认提供几个虚拟桌面 如何,高铁血红蛋白不能和氧气结合,从而导致机体缺氧。...
  7. nodeJs相关知识
  8. 文件重命名工具renamer下载地址
  9. Java游戏守卫者_effective java 终结方法守卫者 demo
  10. VLC如何播放灵派直播编码器SRT流