-1

Got the below error when I launched the app in the device... Checked Manifest file, deleted build file and restarted the IDE. Nothing worked out .. Please help!

MainActivity.kt:

package com.bharat.scand_app


import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.external.scanlibrary.ScanActivity
import com.external.scanlibrary.ScanConstants

import java.io.IOException


class MainActivity : AppCompatActivity() {
    private val REQUEST_CODE = 99
    lateinit private var scanButton: Button
    lateinit private var cameraButton: Button
    lateinit private var mediaButton: Button
    lateinit private var scannedImageView: ImageView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        init()
    }
    private fun init() {
        scanButton = (findViewById<Button>(R.id.scanButton))!!
        scanButton.setOnClickListener(ScanButtonClickListener())
        cameraButton = (findViewById<Button>(R.id.cameraButton))!!
        cameraButton.setOnClickListener(ScanButtonClickListener(ScanConstants.OPEN_CAMERA))
        mediaButton = (findViewById<Button>(R.id.galleryButton))!!
        mediaButton.setOnClickListener(ScanButtonClickListener(ScanConstants.OPEN_MEDIA))
        scannedImageView = (findViewById<ImageView>(R.id.scannedImage))!!
    }

    fun startScan(preference: Int) {
        val intent = Intent(this, ScanActivity::class.java)
        intent.putExtra(ScanConstants.OPEN_INTENT_PREFERENCE, preference)
        startActivityForResult(intent, REQUEST_CODE)
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            val uri: Uri? = data?.extras!!.getParcelable(ScanConstants.SCANNED_RESULT)
            var bitmap: Bitmap? = null
            try {
                bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri)
                if (uri != null) {
                    contentResolver.delete(uri, null, null)
                }
                scannedImageView.setImageBitmap(bitmap)
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
    }
    private fun convertByteArrayToBitmap(data: ByteArray): Bitmap? {
        return BitmapFactory.decodeByteArray(data, 0, data.size)
    }
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }
override fun onOptionsItemSelected(item: MenuItem): Boolean {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    val id: Int = item.getItemId()
    return if (id == R.id.action_settings) {
        true
    } else super.onOptionsItemSelected(item)
}
}

private class ScanButtonClickListener : View.OnClickListener {

    private var preference = 0
    val mActivity : MainActivity
        get() {
            TODO()
        }
    constructor(preference: Int) {
        this.preference = preference
    }

    constructor() {}
    override fun onClick(v: View?) {
        mActivity.startScan(preference)
        Log.d("appLog", "Hello World")
    }
}

Activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/newLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/cameraButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="150dp"
        android:layout_marginTop="630dp"
        android:layout_marginEnd="100dp"
        android:layout_marginBottom="50dp"
        android:text="Camera"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/galleryButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:layout_marginTop="630dp"
        android:layout_marginEnd="20dp"
        android:layout_marginBottom="50dp"
        android:text="Gallery"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/cameraButton"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Error captured in logcat:

    --------- beginning of crash
    2020-07-09 21:50:00.093 7512-7512/com.myapp.scand_app E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.myapp.scand_app, PID: 7512
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.scand_app/com.bharat.scand_app.MainActivity}: kotlin.KotlinNullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3388)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3527)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7710)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
         Caused by: kotlin.KotlinNullPointerException
            at com.bharat.scand_app.MainActivity.init(MainActivity.kt:37)
            at com.bharat.scand_app.MainActivity.onCreate(MainActivity.kt:34)
            at android.app.Activity.performCreate(Activity.java:7820)
            at android.app.Activity.performCreate(Activity.java:7809)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1318)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3363)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3527) 
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123) 
            at android.os.Handler.dispatchMessage(Handler.java:107) 
            at android.os.Looper.loop(Looper.java:214) 
            at android.app.ActivityThread.main(ActivityThread.java:7710) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
underscore_d
  • 6,309
  • 3
  • 38
  • 64
  • 1
    Does this answer your question? [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Marcin Orlowski Jul 09 '20 at 16:40

1 Answers1

0
scanButton = (findViewById<Button>(R.id.scanButton))!!

You find scanButton, but there is no button with id of scanButton in activity_main.xml. Your findViewById call return null, and "!!" is the null assertion operator and it is throwing NPE at that line.

Solution : Add another button with id of scanButton in your activity_mail.xml

WHOA
  • 347
  • 1
  • 10