0

Database reference kept crashing my activity that Unable to start activity ComponentInfo... here the complete code of my main activity The app crashes the moment the activity begins and i can't find any error...

the log cat shows the problem is from where i call valuEventlistener for thee database reference

class MainActivity : AppCompatActivity() {

private lateinit var chatFragment : ChatFragment
private lateinit var friendsFragment: FriendsFragment
private lateinit var requestFragment: RequestFragment
private var reference: DatabaseReference? = null
private var firebaseUser: FirebaseUser? = null





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


     firebaseUser = FirebaseAuth.getInstance().currentUser

    if (firebaseUser != null) {
        reference = FirebaseDatabase.getInstance().reference.child("Users")
            .child(firebaseUser!!.uid)
    }

   //this where the problem is from the logcat
   reference!!.addValueEventListener(object : ValueEventListener{
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists()){
                val user :UsersModel? = dataSnapshot.getValue(UsersModel::class.java)

                name.text = user!!.name
                val photo = user.profilePhoto!!
                if (photo != "default") {
                    Picasso.get().load(photo).placeholder(drawable.avatar)
                        .into(picture)
                }else
                    picture.setImageResource(R.drawable.avatar)


            }

        }

        override fun onCancelled(p0: DatabaseError) {

        }
    })




    val bottomNav : BottomNavigationView = findViewById(R.id.bottomNavigation)

    chatFragment = ChatFragment()
    supportFragmentManager.beginTransaction()
        .replace(id.frame_layout, chatFragment)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .commit()

        bottomNav.setOnNavigationItemSelectedListener { item ->

            when(item.itemId){


                id.chat -> {
              val chatFragment = ChatFragment()
                supportFragmentManager.beginTransaction()
                    .replace(id.frame_layout, chatFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }

            id.friends -> {

                friendsFragment =
                    FriendsFragment()
                supportFragmentManager.beginTransaction()
                    .replace(id.frame_layout, friendsFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()

            }

            id.request -> {

                requestFragment= RequestFragment()
                supportFragmentManager.beginTransaction()
                    .replace(id.frame_layout, requestFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()

            }
                id.log_out -> {
                    FirebaseAuth.getInstance().signOut()
                    val intent = Intent(this@MainActivity, LoginActivity::class.java)
                    startActivity(intent)
                    finish()
                }

        }
        true

    }
    btn.setOnClickListener {
        val main = Intent(this,
            UsersActivity::class.java)
        //main.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
        startActivity(main)
    }
    Chatbtn.setOnClickListener {
        val intent = Intent(this@MainActivity, ChatActivity::class.java)
        startActivity(intent)
    }
}

override fun onStart() {
    super.onStart()

    // Check if user is signed in (non-null) and update UI accordingly.
    //val currentUser : FirebaseUser?
    //currentUser = FirebaseAuth.getInstance().currentUser

    if (firebaseUser == null) {
        val intent = Intent(this@MainActivity, LoginActivity::class.java)
        startActivity(intent)
        finish()
    }

}

}

here is the logcat E/AndroidRuntime: FATAL EXCEPTION: main Process: com.google.meetchat, PID: 13273 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.meetchat/com.google.meetchat.MainActivity}: kotlin.KotlinNullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1843) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6758) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912) Caused by: kotlin.KotlinNullPointerException at com.google.meetchat.MainActivity.onCreate(MainActivity.kt:44) at android.app.Activity.performCreate(Activity.java:7136) at android.app.Activity.performCreate(Activity.java:7127) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2933) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1843)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:193)  at android.app.ActivityThread.main(ActivityThread.java:6758)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)  Process 13273 terminated.

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807

1 Answers1

1

change your condition and try :

if(FirebaseAuth.getInstance().currentUser != null){
    firebaseUser = FirebaseAuth.getInstance().currentUser
}
reference = FirebaseDatabase.getInstance().reference.child("Users").child(firebaseUser!!.uid)
Ashish
  • 6,791
  • 3
  • 26
  • 48