문제 발생
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
'Mobile App' 카테고리의 다른 글
[안드로이드 스튜디오] 마크 다운 파일 미리보기 안보일 때 (0) | 2022.11.30 |
---|---|
[안드로이드 에러] Firebase not working com.google.firebase.installations.FirebaseInstallationsException (0) | 2022.08.11 |
[안드로이드] - Fragment에서 ViewBinding 사용 (_binding 언더바 사용하는 이유) (0) | 2022.07.26 |
[안드로이드] - Data Layer (데이터 레이어) (0) | 2022.07.26 |
[안드로이드] - 도메인 레이어 (Use Case) (0) | 2022.07.25 |