이런식으로 네비게이션 헤더부분에 텍스트뷰를 넣어서
실행을하면 파이어베이스에서 데이터를 꺼내와서 텍스트뷰에 넣어서 이름이 보이도록 하려고하는데
이 부분에서 계속 오류가 납니다.
supportActionBar!!.setDisplayHomeAsUpEnabled(true) // 왼쪽 버튼 사용 여부 true
supportActionBar!!.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp) // 왼쪽 버튼 이미지 설정
supportActionBar!!.setDisplayShowTitleEnabled(false) // 타이틀 안보이게 하기
navigationView_4.setNavigationItemSelectedListener(this)
val textView: TextView = findViewById(R.id.header_name)
textView.text = "내이름"
이런식으로 textView.text = "내이름" 처럼 임시로 문자열을 넣었는데 어플이 중지되면서 실행이 안됩니다.
파이어베이스의 값을 옮겨서 넣었을때는 처음에는 되었는데 뒤로갔다 다시 들어가면 값이 null값이 되면서 오류가 나서 textView?.text = 식으로 할때는 null값이 들어가서 레이아웃에 설정했떤 "이름"이라는 값만 텍스트 뷰에 나왔는데 이런 문제를 해결하고싶습니다.
val myname : DatabaseReference = FirebaseDatabase.getInstance().getReference("/User/$id/name")
myname.addValueEventListener(object : ValueEventListener{
override fun onDataChange(datasnapshot: DataSnapshot?) {
val value = datasnapshot?.value
header_name.text ="$value"
}
override fun onCancelled(p0: DatabaseError?) {
println("Failed to read value.")
}
})
이건 파이어베이스에서 데이터를 갖고와서 텍스트 뷰에 넣는 방식인데, 이를 사용할시 네비게이션 드로어 텍스트뷰에 잘 나오는데 특정 엑티비티 들어간 후 뒤로가기 눌렀을 때 아래와 같은 오류가 나면서 어플이 중지됩니다.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.jsoup, PID: 3273
java.lang.IllegalStateException: header_name must not be null
at com.example.user.jsoup.LOBY$onCreate$1.onDataChange(LOBY.kt:60)
at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source)
at com.google.android.gms.internal.firebase_database.zzhd.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:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
V/FA: Activity resumed, time: 32635142
Application terminated.
LOBY.kt:60 줄은
val value = datasnapshot?.value
입니다.
val myname : DatabaseReference = FirebaseDatabase.getInstance().getReference("/User/$id")
myname.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
error?.toException()?.printStackTrace()
}
override fun onDataChange(p0: DataSnapshot?) {
for (snapshot in p0!!.children){
if (snapshot.key.equals("name")) {
Log.d("리스트","header_name= $header_name, value = ${snapshot.value}")
textView.text = "${snapshot.value}"
}
}
}
})