반응형
자바 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) {
}
});
}
}
'Coding > Android' 카테고리의 다른 글
JetPack compose 뒤로가기 버튼 이벤트 추가하기 (0) | 2023.02.23 |
---|---|
안드로이드 자바로 xml 공공데이터 파싱하기 (0) | 2023.02.20 |
JetPack Compose 인텐트 액티비티 전환하기 (0) | 2023.02.18 |
JetPack Compose 구성 요소 (0) | 2023.02.18 |
jetpack compose 개요 및 구성 (0) | 2023.02.18 |