应用程序崩溃,无法启动活动ComponentInfo

时间:2020-06-29 11:09:04

标签: android kotlin firebase-realtime-database firebase-authentication

数据库参考不断使我的活动崩溃,即无法启动活动ComponentInfo ... 这是我主要活动的完整代码 活动开始时应用崩溃,我找不到任何错误...

日志猫显示问题出在哪里,我调用valuEventlistener作为数据库参考

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

}

}

这是logcat E / AndroidRuntime:致命异常:main 流程:com.google.meetchat,PID:13273 java.lang.RuntimeException:无法启动活动ComponentInfo {com.google.meetchat / com.google.meetchat.MainActivity}:kotlin.KotlinNullPointerException 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1843) 在android.os.Handler.dispatchMessage(Handler.java:106) 在android.os.Looper.loop(Looper.java:193) 在android.app.ActivityThread.main(ActivityThread.java:6758) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:497) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912) 造成原因:kotlin.KotlinNullPointerException 在com.google.meetchat.MainActivity.onCreate(MainActivity.kt:44) 在android.app.Activity.performCreate(Activity.java:7136) 在android.app.Activity.performCreate(Activity.java:7127) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2933) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1843) 在android.os.Handler.dispatchMessage(Handler.java:106) 在android.os.Looper.loop(Looper.java:193) 在android.app.ActivityThread.main(ActivityThread.java:6758) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:497) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912) 进程13273终止。

1 个答案:

答案 0 :(得分:1)

更改您的状况,然后尝试:

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