Android 中的 App Force 关闭和 val 空指针异常

App Force closing and val Null Pointer Exception in Android

我是 运行 我的应用 phone。在那个应用程序上突然强制关闭,我签入了 LogCat.
在那上面,我看到了变量中的空指针异常。我不知道我能做什么?

我也加上“?” null却没有解决问题?是否有可用的替代代码?

这是我的代码 MainActivity

package com.lordshiva.smartapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.cardview.widget.CardView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val cube: CardView = findViewById(R.id.cardCube)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        cube?.setOnClickListener{
            Toast.makeText(this,"cube clicked",Toast.LENGTH_SHORT).show()
        }
    }
}   

这是我的Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="@drawable/background"
    >

   <TextView
      android:id="@+id/headText"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/_3d_objects"
       android:textSize="30sp"
       android:layout_margin="12dp"
       android:textStyle="bold"
       android:textColor="@color/black"
      />

   <ScrollView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_marginTop="35dp"
       >

   <GridLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:columnCount="3"
       android:layout_margin="20dp"
       android:layout_marginTop="20dp"
       >

      <androidx.cardview.widget.CardView
          android:id="@+id/cardCube"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="fill"
          android:layout_columnWeight="1"
          android:layout_rowWeight="1"
          android:layout_row="0"
          android:layout_column="0"
          app:cardCornerRadius="8dp"
          app:cardElevation="8dp"
          app:cardUseCompatPadding="true">
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical|center_horizontal"
             android:gravity="center"
             android:orientation="vertical"
             tools:ignore="UseCompoundDrawables">

             <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/cube_shiv"
                android:contentDescription="@string/todo"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:text="@string/cube"
                android:textColor="@color/black" />

         </LinearLayout>

      </androidx.cardview.widget.CardView>

      <androidx.cardview.widget.CardView
          android:id="@+id/cardBee"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="fill"
          android:layout_columnWeight="1"
          android:layout_rowWeight="1"
          android:layout_row="0"
          android:layout_column="1"
          app:cardCornerRadius="8dp"
          app:cardElevation="8dp"
          app:cardUseCompatPadding="true">
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical|center_horizontal"
             android:gravity="center"
             android:orientation="vertical"
             tools:ignore="UseCompoundDrawables">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/bee_shiv_foreground"
                android:contentDescription="@string/todo"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:text="@string/bee"
                android:textColor="@color/black" />

         </LinearLayout>

      </androidx.cardview.widget.CardView>

      <androidx.cardview.widget.CardView
          android:id="@+id/cardAdd"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="fill"
          android:layout_columnWeight="1"
          android:layout_rowWeight="1"
          android:layout_row="1"
          android:layout_column="0"
          app:cardCornerRadius="8dp"
          app:cardElevation="8dp"
          app:cardUseCompatPadding="true">
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical|center_horizontal"
             android:gravity="center"
             android:orientation="vertical">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_baseline_add_24"
                android:contentDescription="@string/todo"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:text="@string/add"
                android:textColor="@color/black" />

         </LinearLayout>

      </androidx.cardview.widget.CardView>

   </GridLayout>
   </ScrollView>
</RelativeLayout> 

问题是您在设置布局之前获取了 cardCude,这就是为什么您得到空值的原因,因此请在设置布局后获取您的视图,检查如下:

    class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val cube: CardView = findViewById(R.id.cardCube)

        cube?.setOnClickListener{
            Toast.makeText(this,"cube clicked",Toast.LENGTH_SHORT).show()
        }
    }
}