0

我正在尝试访问数据类 ( Content) 并且我想使用 object( val isSelected: Boolean?) from PictureActivity。但是,它会导致UninitializedPropertyAccessException: lateinit property content has not been initialized. 你知道如何解决这种情况吗?我使用了lateinit,但我什至不知道使用lateinit 是否是访问数据类(内容)的最佳方式。如果您知道其他访问方式,请告诉我。

代码在下面。

内容.kt

data class Content(
    val id: Int,
    val text: String,
    val isSelected: Boolean?,
    val url: String?
)

图片活动.kt

class PictureActivity : BaseActivity() {

    private lateinit var binding: PictureActivityBinding

    private lateinit var content: Content

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = PictureActivityBinding.inflate(layoutInflater)
        setContentView(binding.root)
     
        if(content.isSelected!!){
           binding.button1.setOnClickListner{
           startContentDownload(content.url!!)
             return@setOnClickListener
        }
     }
     private fun startContentDownload(url: String) {
        //download image
    }
  }
}
4

2 回答 2

1

Kotlin 中的lateinit关键字为您提供了稍后对其进行初始化的选项,但请确保在使用之前进行初始化。

要检查该变量是否已初始化,您可以使用以下命令:

if(::content.isInitialized) {
    // put your code here
}

在您的情况下,您已经从某个地方(可能是网络调用)获取数据来填写内容数据类,然后您就可以使用它了。

于 2021-09-16T06:30:07.787 回答
0

您需要先初始化内容变量,然后才能使用它

content = Content(...)
于 2021-09-16T05:04:05.333 回答