Kotlin

Retrofit Excepted BEGIN_OBJECT but was BEGIN_ARRAY 오류

김태웜 2021. 4. 8. 09:07

문제의 이유

API에서 OBJECT형식으로 받아와야되는데 ARRAY형식으로 날아옴

 

내가 오류났던부분 (이렇게하면안됨)

TWAPI.kt

interface TWAPI {
    @GET("{id}")
    fun requestSearch(
        @Path("id") id: String
//        ,@Query("userNo") id2 : String
    ):Call<BibleData>
}

BibleActivity.kt

fun TWAPIstart(){
    val response = TWAPIConfig.getService().requestSearch("tae")
    response.enqueue(object : Callback<BibleData>{
        override fun onResponse(call: Call<BibleData>, response: Response<BibleData>) {
            var asd: BibleData? = response.body()
            page = asd?.page
            row = asd?.row
            content = asd?.contents
            Log.i("여기",page+","+row+","+content)
            Log.i("여기",response.toString())

        }

        override fun onFailure(call: Call<BibleData>, t: Throwable) {
            Log.i("여기Error",t.message.toString())
        }

    })

}

전에 한번 해본 방법이라 같은방법으로 하면될줄알았지만 이거는 하나만 가져올때 쓰는방법임 (배열이 아닐때)

 

수정된 방법 (배열로 올때는 이렇게해야됨)

 

TWAPI.kt

interface TWAPI {
    @GET("{id}")
    fun requestSearch(
        @Path("id") id: String
//        ,@Query("userNo") id2 : String
    ):Call<List<BibleData>>
}

 

List형식에 맞춰서 데이터 클래스를 넣어준다

 

BibleActivity.kt

fun TWAPIstart(){
    val response = TWAPIConfig.getService().requestSearch("tae")
    response.enqueue(object : Callback<List<BibleData>>{
        override fun onResponse(call: Call<List<BibleData>>, response: Response<List<BibleData>>) {
            var asd: List<BibleData>? = response.body()
            page = asd?.get(0)?.page
            row = asd?.get(0)?.row
            content = asd?.get(0)?.contents
            Log.i("여기",page+","+row+","+content)
            Log.i("여기",response.toString())
        }
        override fun onFailure(call: Call<List<BibleData>>, t: Throwable) {
            Log.i("여기Error",t.message.toString())
        }
    })
}

데이터 클래스가 들어가는부분에 다 List형식으로 맞춰준다 

 

또한 배열형식으로 오기때문에 get함수로 인덱스 번호에 맞춰 데이터 클래스 변수에 이름에 맞춰서 가져온다

(for문돌려서 response사이즈 맞춰서 전부다 가져오면 될거같음)

 

 

'Kotlin' 카테고리의 다른 글

retrofit CLEARTEXT 오류  (0) 2021.04.08