TypeCastException: null 不能被强制转换为非 null 类型 com.midsizemango.database asekotlin

我试图编码我的应用程序在 Kotlin,但我得到空不能被施加到非空类型和应用程序强制停止时,我打开 EditNoteActivityEXTRA_NOTE可能停止。

非常感谢您的帮助

密码:

class EditNoteActivity : AppCompatActivity() {


var note: Note? = null


private val editNote: TextView? = null


private val fabdrwble: Boolean? = null
private val notesData: MutableList<Note>? = null
private var databaseHelper: DatabaseHelper? = null


private val save: Boolean? = null
private var saveButton: FloatingActionButton? = null
private val tint: ColorStateList? = null


internal var mRowId: Long? = null


internal var spinner: Spinner? = null
internal var spinnertext: String? = null


internal var fav: Int = 0


internal var mSharedFromIntentFilter = false


internal var editTitle: EditText? = null
internal var editContent: EditText? = null
internal var inputlayoutTitle: TextInputLayout? = null
internal var inputlayoutContent: TextInputLayout? = null


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_note)


var toolbar = findViewById(R.id.toolbar_edit) as Toolbar?
setSupportActionBar(toolbar)


if (supportActionBar != null)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)


databaseHelper = DatabaseHelper(applicationContext)


inputlayoutTitle = findViewById(R.id.inputlayoutTitle) as TextInputLayout?
inputlayoutContent = findViewById(R.id.inputlayoutContent) as TextInputLayout?
editTitle = findViewById(R.id.note_title) as EditText
editContent = findViewById(R.id.note_content) as EditText?


val bundle = intent.extras
val s = bundle.getString("edit")


if (s == "add") {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
} else if (s == "editv") {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}


note = intent.getSerializableExtra(EXTRA_NOTE) as Note
if (note != null) {
editTitle?.setText(note!!.getTitle())
editContent?.setText(note!!.getContent())
} else {
note = Note()
//note.setUpdatedAt(new Date());
}


saveButton = findViewById(R.id.add_edit_button) as FloatingActionButton?
saveButton!!.setOnClickListener {
if (isNoteFormOk) {
setNoteResult()
finish()
} else
validateNoteForm()
}


var ll = findViewById(R.id.llmain) as LinearLayout?
var ll1 = findViewById(R.id.ll1) as LinearLayout?


/*if(note.getColor() == Color.TRANSPARENT){
selectedColor = preselect;
}else {
selectedColor = note.getColor();
}


getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);


systemBarTintManager = new SystemBarTintManager(this);
systemBarTintManager.setStatusBarTintEnabled(true);


ll.setBackgroundColor(selectedColor);
ll1.setBackgroundColor(selectedColor);
toolbar.setBackgroundColor(note.getColor());
systemBarTintManager.setStatusBarTintColor(selectedColor);*/


}


override fun onResume() {
super.onResume()
}


override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {


android.R.id.home -> {
onBack()
return true
}
/*
case R.id.speech:
try {
displaySpeechRecognizer();
} catch (ActivityNotFoundException e) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://market.android.com/details?id=com.google.android.googlequicksearchbox"));
startActivity(browserIntent);
}
return true;*/


else -> return super.onOptionsItemSelected(item)
}
}


private fun displaySpeechRecognizer() {
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
startActivityForResult(intent, SPEECH_REQUEST_CODE)
}


override fun onActivityResult(requestCode: Int, resultCode: Int,
data: Intent) {
if (requestCode == SPEECH_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
val spokenText = results[0]
editContent?.setText(spokenText)
}
if (requestCode == RequestResultCode.REQUEST_CODE_ADD_NOTE) {
if (resultCode == Activity.RESULT_OK) {
addNote(data)
}
}
}




private val isNoteFormOk: Boolean
get() {
val title = editTitle?.text.toString()
return !(title == null || title.trim { it <= ' ' }.length == 0)
}


private fun validateNoteForm() {
var msg: String? = null
if (isNullOrBlank(editTitle?.text.toString())) {
msg = "Title Required"
inputlayoutTitle?.error = "Title is Missing"
}
if (msg != null) {
Toast.makeText(applicationContext, msg, Toast.LENGTH_LONG).show()
}
}


private fun setNoteResult() {
note!!.setTitle(editTitle?.text.toString().trim { it <= ' ' })
note!!.setContent(editContent?.text.toString().trim { it <= ' ' })
//note.setUpdatedAt(new Date());
val intent = Intent()
intent.putExtra(EXTRA_NOTE, note)
setResult(Activity.RESULT_OK, intent)
//addNote(intent);


Toast.makeText(this@EditNoteActivity, "Note Saved.", Toast.LENGTH_LONG).show()
}


private fun onBack() {
if (isNoteFormOk) {
if (editTitle?.text.toString() == note!!.getTitle() && editContent?.text.toString() == note!!.getContent()) {
setResult(Activity.RESULT_CANCELED, Intent())
finish()
} else {
AlertDialog.Builder(this@EditNoteActivity)
.setTitle("Save")
.setMessage("Do You Want to Save Note")
.setPositiveButton("SAVE") { dialog, which ->
setNoteResult()
finish()
}.setNegativeButton("CANCEL") { dialog, which ->
setResult(Activity.RESULT_CANCELED, Intent())
finish()
}.show()
}
} else {
setResult(Activity.RESULT_CANCELED, Intent())
finish()
}
}


private fun addNote(data: Intent) {
val note = data.getSerializableExtra(EXTRA_NOTE) as Note
val noteId = databaseHelper!!.createNote(note)
note.setId(noteId)
}


override fun onBackPressed() {
onBack()
val intentHome = Intent(this@EditNoteActivity, MainActivity::class.java)
intentHome.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
intentHome.putExtra(EXTRA_NOTE, note)
setResult(Activity.RESULT_OK, intentHome)
}


companion object {


private val EXTRA_NOTE = "EXTRA_NOTE"
private val SPEECH_REQUEST_CODE = 0


fun isNullOrBlank(str: String?): Boolean {
return str == null || str.trim { it <= ' ' }.length == 0
}
}
}

日志:

java.lang.RuntimeException: Unable to start activity ComponentInfo{
com.midsizemango.databasekotlin/com.midsizemango.databasekotlin.EditNoteActivity}:
kotlin.TypeCastException: null cannot be cast to non-null type
com.midsizemango.databasekotlin.Note
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: kotlin.TypeCastException: null cannot be cast to non-null type com.midsizemango.databasekotlin.Note
at com.midsizemango.databasekotlin.EditNoteActivity.onCreate(EditNoteActivity.kt:82)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
at android.app.ActivityThread.access$800(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)
104592 次浏览

In this line:

note = intent.getSerializableExtra(EXTRA_NOTE) as Note

Note is a non-null type, so the cast to it triggers a null check. Since you're comparing note to null manually afterwards, probably you meant the safe cast operator, which yields null if the expression is not of the type specified in the right-hand side:

note = intent.getSerializableExtra(EXTRA_NOTE) as? Note