kotlin.TypeCastException: null cannot be cast to non-null type com.midsizemango.databasekotlin.Note
                                
                                    
                                                                                    Internet of Things
                                            
                                                                                                                            IoT Frameworks
                                            
                                            
                                        
                                        
                                            3 years ago
                                        
                                    
                                
                                
                                
                                
                                
                                                               
                                _x000D_
_x000D_
I am trying to code my app in Kotlin, but I am getting null cannot be casted to non-null type and app force stops when I open EditNoteActivity  at EXTRA_NOTE probably.
Any Help is Highly Appreciated
Code:
class EditNoteActivity : AppCompatActivity() {
var note: Note? = null
private val editNote: TextView? = null
private val fabdrwble: Boolean? = null
private val notesData: MutableList? = 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
    }
}
}
Logs:
  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)
    
                                
                                
                                    Posted on 16 Aug 2022, this text provides information on IoT Frameworks related to Internet of Things. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.
                                 
                                
                             
                            
                                    
                                    
                                    
                            
                            
                                
                                
                                
                            
                         
                    
manpreet
                                                    Best Answer
                                                
                                                                                                        3 years ago
                                                
                                            
_x000D_ 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