我在 kotlin 中创建了这样的颜色数组
private var colorArray = arrayOf(
ContextCompat.getColor(this, R.color.text_yellow),
ContextCompat.getColor(this, R.color.text_green),
ContextCompat.getColor(this, R.color.text_red)
)
当我想通过索引从 colorArray 获取颜色时
var color = colorArray[0]
我在索引 0 上崩溃了,
Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
我不知道我哪里错了 如果我写 ContextCompat.getColor(this, R.color.text_yellow) 这很好,没有崩溃,但是通过数组索引它给我错误
最佳答案
您将其声明为一个字段:
private var colorArray = arrayOf(
ContextCompat.getColor(this, R.color.text_yellow),
ContextCompat.getColor(this, R.color.text_green),
ContextCompat.getColor(this, R.color.text_red)
)
问题是在调用 onCreate()
方法之前,您的上下文(this
参数)为 null。当您将某物声明为字段时,它会尝试在任何方法调用之前立即对其进行初始化。 (所以在 onCreate
被调用之前)
您可以做的是通过 lazy
调用初始化该字段。
这意味着它实际上仅在首次使用时才被初始化。因此,如果您在 onCreate
之后调用索引,则上下文不会为 null,它应该可以正常工作。
将其更改为:
private var colorArray by lazy { arrayOf(
ContextCompat.getColor(this, R.color.text_yellow),
ContextCompat.getColor(this, R.color.text_green),
ContextCompat.getColor(this, R.color.text_red)
) }
关于android - Kotlin : getResources() on a null object reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059763/