서울 열린데이터광장에서 발급받은 Open API 인증키로 Android 에서 호출해볼 수 있는 앱을 간단하게 만들어보았다.
이런 꿀 정보를 제공하는 앱들은 이미 많지 않을까라는 생각이 들지만,,
UI 를 이쁘게 만들어서 앱 출시를 해봐도 좋을 것 같다..ㅎㅎ
Open API 인증키 발급 정보는 아래 링크에서 확인!
https://mkdevlab.tistory.com/15
서울열린데이터 광장 API 인증키 발급
1. 서울 열린데이터 광장 로그인 https://data.seoul.go.kr/index.do 열린데이터광장 메인 데이터분류,데이터검색,데이터활용 data.seoul.go.kr 2. 인증키 정보 발급 받은 인증키는 '서울시 문화 행사 정보' 다.
mkdevlab.tistory.com
사용 Tool : Android Studio
1. Android Studio 에서 project 를 하나 생성한다.
OpenApiSample01 로 하나 만듦.
2. AndroidManifest.xml 수정
인터넷 사용이 필요하기 때문에 아래 권한을 manifest 하위에 추가 함.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mkdevlab.openapisample01">
<uses-permission android:name="android.permission.INTERNET"/>
...생략...
</manifest>
3. 조회 화면 구성
RecyclerView 를 사용하여 간단하게 작성하였다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
아이템이 구성 레이아웃은 다음과 같이 간단하게 작성
<item_event.xml>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:text="날짜"/>
<TextView
android:id="@+id/code_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="전시종"/>
<TextView
android:id="@+id/event_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/code_name"
android:paddingVertical="10dp"
android:text="제목"
android:lines="1"
android:textSize="18sp"
android:textStyle="bold"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginTop="10dp"
android:background="@android:color/darker_gray"
android:layout_below="@+id/event_title"/>
</RelativeLayout>
아래와 같은 레이아웃이다..
맨 아래 결과를 보면 이해가 더 쉬울 것이다..
4. 조회 코드 작성
RecyclerView 를 사용하고 있기 때문에 별도 커스텀 Adapter 를 만들어서 View 에 데이터를 보여주게끔 하였다.
Open API URL 를 조회하는 자바 코드는 다음과 같다.
urlAddress 에 사용된 URL 및 KEY 정보는 상수로 만들어져있다.
코드를 작성하면서 return 되는 값을 그때그때 확인하기 위해 log 를 남겨보았다.
public void fetch() {
Log.d("main", "fetch() started::");
String urlAddress = URL_1 + KEY + URL_2;
new Thread() {
@Override
public void run() {
super.run();
try {
URL url = new URL(urlAddress);
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 jsonData = buffer.toString();
JSONObject obj = new JSONObject(jsonData);
JSONObject culturalEventInfo = (JSONObject) obj.get("culturalEventInfo");
JSONObject result = (JSONObject) culturalEventInfo.get("RESULT");
//Log.d("main","result : " + result);
Log.d("main","code : " + result.get("CODE"));
Log.d("main","message : " + result.get("MESSAGE"));
JSONArray rowArray = culturalEventInfo.getJSONArray("row");
Log.d("main", "row : " + rowArray);
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < rowArray.length(); i++){
JSONObject tempOjb = rowArray.getJSONObject(i);
String codeName = tempOjb.getString("CODENAME");
String title = tempOjb.getString("TITLE");
String place = tempOjb.getString("PLACE");
String date = tempOjb.getString("DATE");
String useTarget = tempOjb.getString("USE_TRGT");
String useFee = tempOjb.getString("USE_FEE");
String orgLink = tempOjb.getString("ORG_LINK");
String mainImg = tempOjb.getString("MAIN_IMG");
//Log.d("main", "row : " + i + ", codeName : " + codeName + ", title : " + title);
EventData eventData = new EventData(codeName, title, place, date, useTarget, useFee, orgLink, mainImg);
list.add(eventData);
}
eventAdapter.setEventList(list);
Log.d("main","list : " + list);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
} catch (IOException | JSONException e) {
e.printStackTrace();
}
}
}.start();
}
5. Emulator 를 실행 후 결과
짠! 내가 구성한 item 레이아웃으로 결과가 조회된 것을 볼수 있다.
10개를 조회했기 때문에 아래로 스크롤도 가능하다.
이제 각 item을 클릭했을 때 자세한 정보를 보여줄 수 있는 화면을 하나 만들어봐야겠다.
'개발이야기 > Android 개발' 카테고리의 다른 글
클래식 숫자야구 게임 (0) | 2022.04.03 |
---|