본문 바로가기
Mobile App

[안드로이드 에러] End of input at line 1 column 1 path $

by Jman 2022. 7. 29.

문제 발생

Retrofit2 를 사용 중에, Api 통신을 하여 잘 처리되서, 데이터베이스에는 값이 잘 들어간다.

하지만, Callback 에서 onResponse() 메서드로 들어가는 것이 아니라, onFailure() 메서드로 들어가 

에러 메시지 End of input at line 1 column1 path $ 를 배출한다.

 

 

해결 방법

return 되는 response body 가 비었을 경우 에러가 발생하게 된다. [An empty pojo is {} in JSON.]

따라서, 응답이 비어있을 경우 null 로 반환을 해줘야 한다.

 

//추가
class NullOnEmptyConverterFactory : Converter.Factory() {
    override fun responseBodyConverter(type: Type?, annotations: Array<Annotation>?, retrofit: Retrofit?): Converter<ResponseBody, *>? {
        val delegate = retrofit!!.nextResponseBodyConverter<Any>(this, type!!, annotations!!)
        return Converter<ResponseBody, Any> {
            if (it.contentLength() == 0L) return@Converter
            delegate.convert(it)
        }
    }
}


class RetrofitClient {
    fun getClient(url : String) : Retrofit {
        val gson = GsonBuilder().create() //추가

        return Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(NullOnEmptyConverterFactory()) //추가
            .addConverterFactory(GsonConverterFactory.create(gson)) // gson 변수 추가
            .build()
    }
}

 

위의 주석을 보면 //추가 라고 된 코드만 추가해주었다.

 

 

 

참고

https://github.com/square/retrofit/issues/1554

 

Handle Empty Body · Issue #1554 · square/retrofit

After updating to retrofit beta-3 I'm getting the Exception (Because of an empty body) java.io.EOFException: End of input at line 1 column 1 at com.google.gson.stream.JsonReader.nextNonWhitespa...

github.com