AndroidKotlin笔记——TextView赋值出现java.lang.IllegalStateException: tv must not be null
前言
现在有很多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相关推荐
- Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
一:运行test类方法时候报错 报错 java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. S ...
- 报错 java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify @Bootstra
由于我maven仓库之前已经有了有个5.0.10的test包 导致我的变量 <org.springframework.version>4.2.5.RELEASE</org.sprin ...
- spring boot:java.lang.IllegalStateException异常
1.单元测试报错: java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify @B ...
- ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
ES出现异常: failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not lo ...
- 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案
在使用ViewPager的时候遇到一个错误java.lang.IllegalStateException: The specified child already has a parent. You ...
- java.lang.IllegalStateException
java.lang.IllegalStateException: Optional int parameter 'usid' is present but cannot be translated i ...
- 解决autojs报错:Wrapped java.lang.IllegalStateException: image has been recycled 。
用autojs写了一个截图,判读色块位置并点击的代码,运行出错.报错如下: 0:37:17.386/E: Wrapped java.lang.IllegalStateException: image ...
- 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 ...
- 批量下载的实现及java.lang.IllegalStateException异常
在工作流的一张表单里可能会有多个步骤上传附件,在用户的待办中往往会存在多条带有附件的任务,如果一一打开并且点击下载链接下载,不仅费时,而且繁琐,用户体验较差. OA系统采用的是FastDFS做为文件服 ...
最新文章
- React for循环渲染组件
- 剑指offer:扑克牌顺子
- VTK:Texture之TextureCutSphere
- 米其林全球挑战赛电子门票欣赏
- java 迁移数据_从迁移到Java 7的小技巧
- Camel:构建基于消息的应用程序
- 12306订票助手java_12306订票助手
- 10个Bug环环相扣,你能解开几个?
- Reporting Service RDLC 数据换行解决方案
- Android APK XML解析与反编译方法
- 思科软件服务器怎么作用,Cisco设备如何应用应用TFTP服务器
- 给初学者:用VB写外挂 ———— 实战一:动手写一个红色警戒金钱锁定工具
- 不登陆路由器查询路由器IP地址和物理地址
- 在 python 中使用 Selenium 报错self.capabilities = response['value'] KeyError: 'value'的解决办法
- 2021年需要关注的15大软件测试趋势(一)
- Redis 核心知识——01
- 集线器、中继器、网桥、交换机、网关、路由器——今天必把你们区分开
- 编程中的英语单词大全
- 云服务器能共享文件夹,云服务器能共享文件夹
- go 进阶 多路复用支持: 一. netpoller 初始化
热门文章
- 【转贴】公务员考试:逻辑推理测试辅导
- RxJava 2.x 优秀学习资源
- java 记事本界面_JAVA/GUI程序之记事本
- AMD于2022年完成并购赛灵思XILINX,7系列产品生命周期延长至2035年
- 用DGAN生成mnist图片以及动漫头像图片
- linux默认提供几个虚拟桌面 如何,高铁血红蛋白不能和氧气结合,从而导致机体缺氧。...
- nodeJs相关知识
- 文件重命名工具renamer下载地址
- Java游戏守卫者_effective java 终结方法守卫者 demo
- VLC如何播放灵派直播编码器SRT流