수원통학러
528
2020-04-25 10:18:26
3
132

안드로이드 레트로핏 파싱하는데 널


공공데이터를 레트로핏써서 해보려는데 

{
    "response": {
        "header": {
            "resultCode""0000",
            "resultMsg""OK"
        },
        "body": {
            "items": {
                "item": {
                    "booktour"1,
                    "contentid"126508,
                    "contenttypeid"12,
                    "createdtime"20031230000000,
                    "homepage""경복궁 <a href=\"http://www.royalpalace.go.kr/\" target=\"_blank\" title=\"새창 : 경복궁 홈페이지로 이동\">http://www.royalpalace.go.kr</a><br />\n궁궐길라잡이 <a href=\"http://www.palaceguide.or.kr/\" target=\"_blank\" title=\"새창 : 궁궐길라잡이 홈페이지로 이동\">http://www.palaceguide.or.kr</a><br />한국의재발견 <a href=\"http://www.rekor.or.kr/\" target=\"_blank\" title=\"새창 : 한국의재발견 홈페이지로 이동\">http://www.rekor.or.kr</a>",
                    "modifiedtime"20200324151029,
                    "title""경복궁"
                }
            },
            "numOfRows"10,
            "pageNo"1,
            "totalCount"1
        }
    }
}
이런형태가 있습니다
레트로핏을 썼을때 onfail은 안타고 onResponse로 제대로 타는데 파싱하려고 로그찍어보면 null이 나옵니다..
이렇게 썼구요 body자체를 찍어봐도 null이나오네요 onfailure은 전혀안탑니다 제가 받는형식을 잘못쓴걸까요..?
ApiManager.getInstance().getTest("인증키로 임의로 지웠습니다",
"126508",
"Y",
"ETC",
"AppTest",
"json").enqueue(object : Callback<test> {
override fun onFailure(call: Call<test>, t: Throwable) {
Log.e("tag", "getUserResp 에러")
t.stackTrace
}

override fun onResponse(call: Call<test>, response: Response<test>) {
if(response.isSuccessful) {
val body = response.body()
Log.e("tag", body.toString())
body.apply {
// Log.e("tag", "booktour "+this?.resultCode + " contentId "+this?.contentid)
}
}
}
})
data class test(
val resultCode : String,
val contentid : String,
val defaultYN : String,
val MobileOS : String,
val MobileApp : String,
val _type : String

)
0
0
  • 답변 3

  • 아카즈
    80
    2020-04-25 13:34:40
    응답 JSON 데이터 구조와 데이터 클래스가 매칭이 안되네요... (직접 시리얼라이저를 구현하시는게 더 나을듯 합니다.)
    0
  • 수원통학러
    528
    2020-04-25 18:27:41

     



     시리얼라이저?를 안쓰고는 어떻게 할수있을까요? 시리얼라이즈를 쓰면 그냥 어노테이션쓰고

    해당받는 리스폰스변수명만 써주면 되는건가요? 괄호를 구성하는 애들만 써주면되는건지..?

    0
  • 아카즈
    80
    2020-04-25 22:47:03

    가령 이런식으로 만들면 될 것 같습니다.


    data class Test(val response: TestResponse)
    data class TestResponse(val header: Header)
    data class Header(val resultCode: String, val resultMsg: String)


    지금 JSON 데이터가 중첩된 객체가 포함된 구조라서 데이터 클래스도 중첩된 데이터를 포함하는 구조로 맞춰줘서 만들어줘야겠죠... 

    지금 작성한 코드는 resultCode랑 resultMsg 정보만 추출한다고 가정한 코드입니다.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.