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)