Android 공부

(Solve) Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter databaseError

Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter databaseError


이것은 코틀린에서 일어날 수 있는 오류중 하나이다.


예제가 하나 있다.




수정 전



likePostsRef!!.runTransaction(object : Transaction.Handler {
override fun doTransaction(mutableData: MutableData?): Transaction.Result {
var likeRefResult: CoinLike? = null
likeRefResult = mutableData!!.getValue<CoinLike>(CoinLike::class.java)//참조한 ref의 값을 가져옴

...

...


return Transaction.success(mutableData)
}

override fun onComplete(databaseError: DatabaseError, b: Boolean,
dataSnapshot: DataSnapshot) {
// Transaction completed
Log.d("CalCoinFirebase", "postTransaction:onComplete:$databaseError")
}


})



이 로직은 Firebase를 통해서 데이터를 가져오는 로직이다.

java code가 되어 있는 것을 자동으로 convert하였고

컴파일 하면서 오류가 일어나지 않았다.


하지만,


Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter databaseError


오류가 발생하였다.

어느 위치에서 발생했는 지 알아낼 수 없기 때문에 잡기가 상당히 어려웠다.

정답은 override 함수에서 온 변수에서 null 값이 일어났기 때문에 발생하였다.

코드를 하나 수정 했고 오류가 일어나지 않았다.



수정 후



likePostsRef!!.runTransaction(object : Transaction.Handler {
override fun doTransaction(mutableData: MutableData?): Transaction.Result {
var likeRefResult: CoinLike? = null
likeRefResult = mutableData!!.getValue<CoinLike>(CoinLike::class.java)//참조한 ref의 값을 가져옴

...

...


return Transaction.success(mutableData)
}

override fun onComplete(databaseError: DatabaseError?, b: Boolean,
dataSnapshot: DataSnapshot) {
// Transaction completed
Log.d("CalCoinFirebase", "postTransaction:onComplete:$databaseError")
}


})



override 함수에서 데이터 값이 오는데

해당 값이 null 값이라서 발생한 오류였고 간단하게 물음표 하나만 입력하게 되면

잘 처리 된다.