数据库参考不断使我的活动崩溃,即无法启动活动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终止。
答案 0 :(得分:1)
更改您的状况,然后尝试:
if(FirebaseAuth.getInstance().currentUser != null){
firebaseUser = FirebaseAuth.getInstance().currentUser
}
reference = FirebaseDatabase.getInstance().reference.child("Users").child(firebaseUser!!.uid)