[Android] java.lang.NumberFormatException: For input string: "null" at com.example.myapplication. 에러

알린·2023년 5월 12일
0

TroubleShooting

목록 보기
4/25

아래 코드에서 오류가 났다고 떴다.

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")
            }
        })
profile
Android 짱이 되고싶은 개발 기록 (+ ios도 조금씩,,👩🏻‍💻)

0개의 댓글