Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @Builder
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
Archives
- Today
- Total
기록
androidStudio/java/공공데이터 api 사용하기 본문
1. 공공데이터 api 발급받기
해당 프로젝트에서는 서울시 가로수 위치정보 (좌표계: WGS1984)를 사용하였다.
- 회원가입
- 로그인
- api key 발급
https://data.seoul.go.kr/dataList/OA-1325/S/1/datasetView.do
2. key 등록하기
여러 서비스 api를 사용하기에 keys.xml 파일에 key 값을 저장하였다.
이후 .gitignore에 keys.xml 를 등록하여 키값이 github에 의해 추적되지 않도록 했다.
// res/values/keys.xml
<resources>
<string name="SEOUL_GAROSU_API_KEY">MY_API_KEY</string>
</resources>
3. 데이터를 담아둘 클래스 만들기
api에 담긴 정보 중 필요한 데이터만 사용한다.
public class TreeApiData {
public static String STRING_GU_NM = "GU_NM";
public static String STRING_TRE_IDN = "TRE_IDN";
public static String STRING_WDPT_NM = "WDPT_NM";
public static String STRING_LNG = "LNG";
public static String STRING_LAT = "LAT";
String GU_NM; // 구명
String TRE_IDN; // 수목고유번호
String WDPT_NM; // 가로명
String LNG; // 경도
String LAT; // 위도
public TreeApiData(String GU_NM, String TRE_IDN, String WDPT_NM, String LNG, String LAT) {
this.GU_NM = GU_NM;
this.TRE_IDN = TRE_IDN;
this.WDPT_NM = WDPT_NM;
this.LNG = LNG;
this.LAT = LAT;
}
@Override
public String toString() {
return "TreeApiData{" +
"GU_NM='" + GU_NM + '\'' +
", TRE_IDN='" + TRE_IDN + '\'' +
", WDPT_NM='" + WDPT_NM + '\'' +
", LNG='" + LNG + '\'' +
", LAT='" + LAT + '\'' +
'}';
}
}
4. 데이터 받아와서 파싱하기
- usesCleartextTraffic
// AndroidManifest.xml
<application
android:usesCleartextTraffic="true"
.../>
위 설정을 해주지 않으면 아래와 같은 오류가 발생한다.
java.io.IOException: Cleartext HTTP traffic to openapi.nature.go.kr not permitted
- Thread
데이터를 불러올 때에는 Main에서 바로 요청해서는 안된다.
- 데이터 형태 확인
아래에서 사용해야 할 데이터는 GeoInfoOfRoadsideTreeW>row에 위치하고 있다.
- 코드 작성하기
public static ArrayList<TreeApiData> treeApiDataList;
public void getTreeData(){
new Thread(){
@Override
public void run(){
// 쿼리 작성하기
String seoul_garosu_api_key = getString(R.string.SEOUL_GAROSU_API_KEY);
String dataType = "json";
String GU_NM = "중구";
String dataCount = "10";
String queryUrl = "http://openAPI.seoul.go.kr:8088/"+seoul_garosu_api_key+
"/"+dataType+"/GeoInfoOfRoadsideTreeW/1/"+dataCount+"/"+GU_NM;
try {
// 데이터 받아오기
URL url = new URL(queryUrl);
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();
String line = reader.readLine();
while (line != null) {
buffer.append(line + "\n");
line = reader.readLine();
}
// 데이터 파싱하기
String jsonString = buffer.toString();
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject GeoInfoRoadsideTree = jsonObject.getJSONObject("GeoInfoOfRoadsideTreeW");
JSONArray row = GeoInfoRoadsideTree.getJSONArray("row");
treeApiDataList = new ArrayList<TreeApiData>();
for (int i=0; i<row.length();i++){
JSONObject item = row.getJSONObject(i);
treeApiDataList.add(new TreeApiData(
item.getString(TreeApiData.STRING_GU_NM),
item.getString(TreeApiData.STRING_TRE_IDN),
item.getString(TreeApiData.STRING_WDPT_NM),
item.getString(TreeApiData.STRING_LNG),
item.getString(TreeApiData.STRING_LAT)
));
}
Log.e("mapActivity", treeApiDataList.toString());
} catch (Exception e){
e.printStackTrace();
}
}
}.start();
}
5. 결과
'Moblie > Android' 카테고리의 다른 글
androidStudio/상태바와 액션바 제거하기 (0) | 2022.04.04 |
---|---|
androidStudio/kotliln/recyclerview 사용하기 (0) | 2022.03.29 |
androidStudio/java/naver map api 사용하기 (0) | 2022.01.22 |
[issue] java.lang.SecurityException (0) | 2021.12.07 |
androidStudio/java/TTS 사용하기 (0) | 2021.11.30 |
Comments