Bjs
Bjs

Reputation: 15

Android Runtime Exception (app can't open)

E/AndroidRuntime: FATAL EXCEPTION: main

Process: za.co.riggaroo.motioncamera, PID: 17583 kotlin.TypeCastException: null cannot be cast to non-null type kotlin.Boolean at za.co.riggaroo.motioncamera.MainActivity$setupArmSystemToggle$2.onDataChange(MainActivity.kt:42) at com.google.android.gms.internal.to.zza(Unknown Source) at com.google.android.gms.internal.vj.zzHX(Unknown Source) at com.google.android.gms.internal.vp.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

package za.co.riggaroo.motioncamera

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.SwitchCompat
import android.util.Log
import android.widget.ImageView
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener

class MainActivity : AppCompatActivity() {

private lateinit var adapter: LogsAdapter
private lateinit var armSystemToggleButton: SwitchCompat
private lateinit var armSystemImageView: ImageView

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

    setupMotionLogsRecyclerView()
    setupArmSystemToggle()
}

private fun setupArmSystemToggle() {
    armSystemToggleButton = findViewById(R.id.switch_arm_system)
    armSystemImageView = findViewById(R.id.image_view_arm_system)
    val armedValue =
            FirebaseDatabase.getInstance().getReference(SYSTEM_ARMED_STATUS_FIREBASE_REF)

    armSystemToggleButton.setOnCheckedChangeListener { _, checkedValue ->
        armedValue.setValue(checkedValue)
    }

    armedValue.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            Log.d(ACT_TAG, "onDataChange:" + dataSnapshot.toString())
            val isArmed = dataSnapshot.value as Boolean
            toggleUIState(isArmed)
        }

        override fun onCancelled(p0: DatabaseError?) {

        }

    })
}

private fun toggleUIState(isArmed: Boolean) {
    armSystemToggleButton.isChecked = isArmed
    armSystemToggleButton.text = if (isArmed) {
        getString(R.string.system_armed)
    } else {
        getString(R.string.system_unarmed)
    }
    val armedImageResource = if (isArmed) {
        R.drawable.ic_armed
    } else {
        R.drawable.ic_not_armed
    }
    armSystemImageView.setImageResource(armedImageResource)

}

private fun setupMotionLogsRecyclerView() {
    val recyclerViewImages = findViewById<RecyclerView>(R.id.recyclerViewImages)
    recyclerViewImages.isNestedScrollingEnabled = false
    val databaseRef = FirebaseDatabase.getInstance().getReference(MOTION_LOGS_FIREBASE_REF)

    adapter = LogsAdapter(databaseRef.orderByChild(ORDER_BY_TIMESTAMP).ref)
    val linearLayoutManager = LinearLayoutManager(this)
    linearLayoutManager.reverseLayout = true
    linearLayoutManager.stackFromEnd = true
    recyclerViewImages.layoutManager = linearLayoutManager
    recyclerViewImages.adapter = adapter
}

override fun onDestroy() {
    super.onDestroy()
    adapter.cleanup()
}

companion object {
    private const val ORDER_BY_TIMESTAMP = "timestamp"
    private const val ACT_TAG: String = "MainActivity"
    private const val MOTION_LOGS_FIREBASE_REF = "motion-logs"
    private const val SYSTEM_ARMED_STATUS_FIREBASE_REF = "system-armed"
}


}

Upvotes: 0

Views: 138

Answers (2)

Nagesh Jatagond
Nagesh Jatagond

Reputation: 344

Please refer this,

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

In your case try this:

val isArmed = dataSnapshot.value as? Boolean

Upvotes: 2

Santanu Sur
Santanu Sur

Reputation: 11487

Try this in onDataChange(..)

     if(dataSnapshot.value != null) {          
          val isArmed = dataSnapshot.value as Boolean
          toggleUIState(isArmed)
     }

Upvotes: 0

Related Questions