安卓工作室Kotlin:应用程序在启动时崩溃,出现错误致命异常:main



在设备中启动应用程序时出现以下错误。。。检查了清单文件,删除了生成文件并重新启动了IDE。没什么结果。。请帮忙!

主要活动.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_min.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>

在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) 
scanButton = (findViewById<Button>(R.id.scanButton))!!

您找到了scanButton,但activity_main.xml中没有id为scanButton的按钮。您的findViewById调用返回null,并且"quot;是null断言运算符,并且它正在该行抛出NPE。

解决方案:在activity_mail.xml 中添加另一个id为scanButton的按钮

相关内容

最新更新