Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

kotlin.TypeCastException: null cannot be cast to non-null type com.midsizemango.databasekotlin.Note

Tags:

android

kotlin

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<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     } } } 

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) 
like image 667
Prasad Shirvandkar Avatar asked Jun 21 '16 15:06

Prasad Shirvandkar


1 Answers

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 
like image 171
Alexander Udalov Avatar answered Sep 22 '22 15:09

Alexander Udalov