首页 > 解决方案 > Kotlin - 我收到错误,因为 id 为空。如何解决?

问题描述

我正在尝试制作一个显示您选择的颜色的程序。因此,您可以在带有颜色阴影的图片上滑动,应用程序会显示您当前的颜色。在它下面有一个文本视图,它将显示当前颜色的 RGB 值。但是当我尝试为颜色选择器编写代码时,我收到了这个错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.leds/com.example.leds.MainActivity}:
java.lang.NullPointerException: color_picker must not be null

我尝试了一切,但我无法修复它。

我的科特林代码:

class MainActivity : AppCompatActivity() {

private lateinit var bitmap:Bitmap

@SuppressLint("ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    color_picker.isDrawingCacheEnabled = true
    color_picker.buildDrawingCache(true)

    val wheel = findViewById<ImageView>(R.id.color_picker)

    wheel.setOnTouchListener { v, event ->
        if (event.action == MotionEvent.ACTION_DOWN || event.action == MotionEvent.ACTION_MOVE) {
            bitmap = color_picker.drawingCache

            val pixel = bitmap.getPixel(event.x.toInt(), event.y.toInt())

            val r = Color.red(pixel)
            val g = Color.green(pixel)
            val b = Color.blue(pixel)

            selected_color_view.setBackgroundColor(Color.rgb(r,g,b))

            color_value.text = "RGB: $r, $g, $b"
        }
        true}

我的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">

<ImageView
    android:id="@+id/color_picker"
    android:layout_width="350dp"
    android:layout_height="450dp"
    android:src="@drawable/colour_wheel"/>

<View
    android:id="@+id/selected_color_view"
    android:layout_width="100dp"
    android:layout_height="100dp" />

<TextView
    android:id="@+id/color_value"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="RGB:"
    android:textColor="#000"
    android:textSize="18sp"/>

标签: android-studiokotlin

解决方案


color_picker这是因为你在使用它之前没有初始化变量

color_picker.isDrawingCacheEnabled = true
color_picker.buildDrawingCache(true)

你必须像你一样初始化它val wheel = findViewById<ImageView>(R.id.color_picker),然后你可以像这样修改它 wheel.isDrawingCacheEnabled = true

@EDIT您必须先初始化变量轮,然后才能调用它的属性。

val wheel = findViewById<ImageView>(R.id.color_picker)
wheel.isDrawingCacheEnabled = true
wheel.buildDrawingCache(true)

推荐阅读