본문 바로가기
과학/안드로이드

안드로이드 자바 retrofit2 json 공공데이터 가져오기

by 루민즈 2023. 2. 21.

자바 retrofit2로 json 공공데이터를 가져와 봅시다.

 

 

공공데이터

공공데이터는 국토교통부_(TAGO)_열차정보를 사용할 것입니다.

 

국토교통부 열차정보 공공데이터를 살펴보면

도시코드 목록 조회라는 요청변수가 있습니다. 

여기에 인증키를 넣고 type부분에 json이라 치고 미리 보기를 누르면 json 데이터 웹사이트가 뜹니다. 

 

이데이터들을 가져와 봅시다. 

먼저 build.gradle(Module:app) 파일에서 dependencies 부분에 

 

implementation

 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

이 부분을 추가합시다. 

 

그런 다음 Sync Now를 눌러주세요 이제 json 코드를 다 복사한 다음 아래 사이트를 들어가 주세요 

https://www.jsonschema2pojo.org/

 

jsonPOJO

사이트를 들어가면 json 코드를 입력할 수 있는 부분이 나옵니다. 

아까 복사한 json 코드를 붙여 넣기 해준다음 Source Type에는 json 

Annotation style에는 None 그리고 Use primitive types랑 Use long integers를 체크해 주세요 

그런 다음 Zip을 누르면 옆에 Zip파일이 뜨는데 다운로드를 해준 다음 압축을 풀고 파일을 전부 안드로이드 프로젝트에 붙여 넣기 해주세요 

 

 

이제 코드를 입력해 줍시다. json 같은 경우 변수명이 같으면 SerializeName을 안 해도 됩니다. 

 

Example.java

package com.grandera.tistory;


public class Example {

    private response response;

    public response getResponse() {
        return response;
    }

    public void setResponse(response response) {
        this.response = response;
    }

}

Response

package com.grandera.tistory;


public class response {

    private Header header;
    private Body body;

    public Header getHeader() {
        return header;
    }

    public void setHeader(Header header) {
        this.header = header;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }

}

 

Header

package com.grandera.tistory;


public class Header {

    private String resultCode;
    private String resultMsg;

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMsg() {
        return resultMsg;
    }

    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

}

 

Body

 

package com.grandera.tistory;

public class Body {

    private Items items;

    public Items getItems() {
        return items;
    }

    public void setItems(Items items) {
        this.items = items;
    }

}

Items

package com.grandera.tistory;

import java.util.List;

public class Items {

    private List<Item> item;

    public List<Item> getItem() {
        return item;
    }

    public void setItem(List<Item> item) {
        this.item = item;
    }

}

 

Item

package com.grandera.tistory;


public class Item {

    private long citycode;
    private String cityname;

    public long getCitycode() {
        return citycode;
    }

    public void setCitycode(long citycode) {
        this.citycode = citycode;
    }

    public String getCityname() {
        return cityname;
    }

    public void setCityname(String cityname) {
        this.cityname = cityname;
    }

}

MyApi

package com.grandera.tistory;

import retrofit2.Call;
import retrofit2.http.GET;

public interface MyApi {
    @GET("getCtyCodeList?serviceKey=본인의인증키&_type=json")
    Call<Example> getData();
}

MainActivity

package com.grandera.tistory;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://apis.data.go.kr/1613000/TrainInfoService/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        MyApi api = retrofit.create(MyApi.class);

        Call<Example> call = api.getData();
        call.enqueue(new Callback<Example>() {
            @Override
            public void onResponse(Call<Example> call, Response<Example> response) {
                if (response.isSuccessful()) {
                    Example data = response.body();
                    // 데이터를 사용합니다.
                    assert data != null;
                    Log.v("태그","값:"+data.getResponse().getBody().getItems().getItem().get(0).getCityname());
                } else {
                    // 서버 응답 실패
                }
            }

            @Override
            public void onFailure(Call<Example> call, Throwable t) {

            }
        });

    }
}

 

728x90
반응형