아래 코드에서 오류가 났다고 떴다.
var waitUserNum = 0
databaseReference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
//val test=snapshot.child("WaitUsers")
waitUserNum = snapshot.child("WaitUsers").child(resCate)
.child("waitUserNum")
.value.toString().toInt()
//에러 보고용 로그
Log.e("qwer", waitUserNum.toString())
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
오류원인
waitUserNum = snapshot.child("WaitUsers").child(resCate) .child("waitUserNum") .value.toString().toInt()
이 코드에서 'snapshot.child("WaitUsers").child(resCate).child("waitUserNum").value.toString()' 을 호출하고, 그 결과를 toInt() 함수를 사용하여 Int로 변환하고자 하지만
'value'가 "null"로 설정되어 있는 경우 NumberFormatException이 발생할 수 있다고 한다.
- 정리
Firebase 데이터베이스에서 waitUserNum의 값을 가져온 후, toString() 함수를 호출하여 String으로 변환해야함.
그러나 value가 Null인 경우, toString()을 호출하면 "null" 문자열이 반환되고, 이는 toInt() 함수로 변환될 수 없으므로 NumberFormatException이 발생
해결방법
해당 오류를 해결하기 위해선 value가 null인지 먼저 확인해줄 것..!
val waitUserNumValue = snapshot.child("WaitUsers").child(resCate) .child("waitUserNum") .value waitUserNum = if (waitUserNumValue != null) { waitUserNumValue.toString().toInt() } else { 0 // 또는 적절한 기본값 }
오류가 나는 코드를 위와 같이 수정한다.
value를 waitUserNumValue 변수에 할당하고,
이 변수가 null인지 확인 후 toString().toInt()를 수행하게 된다.
null인 경우 기본값으로 0이 할당되게 된다.
아래는 수정된 전체 코드다.
databaseReference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
//val test=snapshot.child("WaitUsers")
val waitUserNumValue = snapshot.child("WaitUsers").child(resCate)
.child("waitUserNum")
.value
waitUserNum = if (waitUserNumValue != null) {
waitUserNumValue.toString().toInt()
} else {
0 // 또는 적절한 기본값
}
//에러 보고용 로그
Log.e("qwer", waitUserNum.toString())
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})