Security Coding
Security Coding

Reputation: 177

App Force closing and val Null Pointer Exception in Android

I am running my app in phone. On that app suddenly force closed and I checked in LogCat.
On that, I see Null Pointer Exception In Variable. I don't know what I can do?

I also Add "?" Null but it did not solve the problem? Is any alternative code available?

This is my code 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()
        }
    }
}   

This my 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> 

Upvotes: 1

Views: 92

Answers (1)

Nitin Prakash
Nitin Prakash

Reputation: 977

The issue is you are getting your cardCude before setting layout that is why you are getting null so get your views after setting layout check below:

    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()
        }
    }
}

Upvotes: 2

Related Questions