라떼는말이야

[Android] Retrofit2 - Unable to invoke no-args constructor for interface retrofit2.http.Url. 본문

오류메시지

[Android] Retrofit2 - Unable to invoke no-args constructor for interface retrofit2.http.Url.

MangBaam 2022. 1. 21. 02:21
반응형

오류 메시지

 

java.lang.RuntimeException: Unable to invoke no-args constructor for interface retrofit2.http.Url. Registering an InstanceCreator with Gson for this type may fix this problem.

레트로핏 사용을 하는데 위와 같은 오류가 발생했다.

 

서버에서 내려주는 데이터
{
    "id": 4,
    "title": "세상에서 제일 맛집!! 여기로 와요!!",
    "price": "18,000원",
    "lat": 35.219413, 
    "lng": 126.853902,
    "imgUrl": "https://i.picsum.photos/id/131/200/200.jpg?hmac=q40x2oH1ZEkSm4ghNQ71nzzO07pbbG7hmn4J4KEtG-8"
}

 

모델 - 수정 전
data class HouseModel(
    val id: Int,
    val title: String,
    val price: String,
    val lat: Double,
    val lng: Double,
    val imgUrl: Url
)

서버에서 받은 Json 데이터를 HouseModel 이라는 타입으로 매핑해서 객체로 만들어야 하는데 이때 Gson이 사용된다.

 

이런 상황에서 위와 같은 오류가 발생했던 것인데 이는 Gson이 제대로 매핑해주지 못해서 발생한 오류라고 판단됐다.

 

모델 - 수정 후
data class HouseModel(
    val id: Int,
    val title: String,
    val price: String,
    val lat: Double,
    val lng: Double,
    val imgUrl: String
)

정상 동작

imgUrl의 타입을 String으로 변경하니 위 사진과 같이 정상적으로 데이터를 받아오는 것을 확인했다.

 


이미지를 표시할 때 Glide를 사용했는데 load 부분에서 uri를 사용할 수 있다는 것만 생각하고 imgUrl의 타입을 Url로 했던 것이 실수였다.

여러 타입이 가능하고 string도 가능하므로 받아온 그대로를 사용해도 된다.

반응형
Comments