post-custom-banner

💌 [Kotlin/Error] java.io.EOFException: End of input at line 1 column 1 path

Retrofit2 를 이용해 API 통신을 하던 도중 오류가 떴다.

java.io.EOFException: End of input at line 1 column 1 path $

찾아보니 Response body 값이 null 일 때 발생하는 오류였다.

📌 해결 방법

  • 🩵 Retrofit2 API 통신 시 응답 값이 없을 때 오류 처리를 위한 클래스 만들어준다.
class NullOnEmptyConverterFactory : Converter.Factory() {
    fun converterFactory() = this
    override fun responseBodyConverter(type: Type, annotations: Array<out Annotation>, retrofit: Retrofit) = object : Converter<ResponseBody, Any?> {
        val nextResponseBodyConverter = retrofit.nextResponseBodyConverter<Any?>(converterFactory(), type, annotations)
        override fun convert(value: ResponseBody) = if (value.contentLength() != 0L) {
            try{
                nextResponseBodyConverter.convert(value)
            }catch (e:Exception){
                e.printStackTrace()
                null
            }
        } else{
            null
        }
    }
}
  • 🩵 Retrofit 빌더를 이용해 만들어 줄 때 addConverterFactory 에 적용해준다.
val retrofit: Retrofit
	get() = Retrofit.Builder()
		.baseUrl(URL)
		.addConverterFactory(NullOnEmptyConverterFactory())
		.addConverterFactory(GsonConverterFactory.create())
		.build()

🚨 주의할 점

NullOnEmptyConverterFactory 설정을 GsonConverterFactory 보다 더 위에 설정해줘야한다.
아래에 하면 Exception 이 그대로 발생함 !

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻
post-custom-banner

0개의 댓글