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 |
Tags
- 1과목
- java
- 이메일
- non-nullable
- 함수
- setState
- firebase_auth
- swift
- Android
- auth
- Null Safety
- BottomNavigationBar
- 변수
- GetX
- Provider
- 회원가입
- Kotlin
- StatefulWidget
- firebase
- 로그인
- go_router
- Cocoa touch Framework
- 정보처리기사
- 안드로이드
- dart
- UserAccountsDrawerHeader
- 안드로이드 스튜디오
- IOS
- flutter
- 상태관리
Archives
- Today
- Total
앱 개발 공부방
안드로이드 스튜디오-공공 데이터 API사용하기 본문
728x90
위 홈페이지를 가서 회원가입 및 로그인을 합니다
다음으로 데이터셋에 가셔서 원하는 데이터를 검색합니다(저는 전기차에 관해 찾아보겠습니다)
찾으신 다음 활용신청을 합니다
활용 신청을 할 때
시스템 유형-일반
활용 목적-앱 개발로 하시면 됩니다
신청하시고 약 30~40분 뒤에
서비스 키에 상단에 일반 인증키를 복사 붙여 넣기를 하시고 미리보기를 하시게 되면
이렇게 서울의 전기차 충전소에 관한 내용이 나오면 안드로이드 스튜디오로 넘어가 만들어 보겠습니다.
참고 문서에는 필수 요청 변수, 파싱 할 때 필요한 여러 가지 정보들이 있으니 꼭 다운로드하여서 보시기 바랍니다.
아래 사진처럼 원하는 지역을 검색하여 정보를 띄우는 식으로 만들어보겠습니다.
xml코드.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:weightSum="10">
<EditText
android:id="@+id/edit"
android:layout_width="200dp"
android:layout_height="match_parent"
android:hint="enter text to search"/>
<Button
android:id="@+id/button"
android:layout_width="100dp"
android:layout_height="match_parent"
android:text="search"
android:textSize="12sp"
android:onClick="mOnClick"/>
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="8sp"
android:textStyle="bold"/>
</ScrollView>
</LinearLayout>
manifest에서 가셔서 권한설정을 해줍니다
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
또 application 안에
android:usesCleartextTraffic="true" 이 구문도 넣어줍니다
main.java
//설명은 주석
package com.example.gongapi;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
public class MainActivity extends AppCompatActivity {
EditText edit;
TextView text;
XmlPullParser xpp;
String key="자신의 서비스키";
String data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit= (EditText)findViewById(R.id.edit);
text= (TextView)findViewById(R.id.result);
}
public void mOnClick(View v){
switch (v.getId()){
case R.id.button:
new Thread(new Runnable() {
@Override
public void run() {
data=getXmlData();
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(data);
}
});
}
}).start();
break;
}
}
String getXmlData(){
StringBuffer buffer=new StringBuffer();
String str= edit.getText().toString();//EditText에 작성된 Text얻어오기
String location = URLEncoder.encode(str);
String query="%EC%A0%84%EB%A0%A5%EB%A1%9C";
String queryUrl="http://openapi.kepco.co.kr/service/EvInfoServiceV2/getEvSearchList?addr="+location+"&pageNo=1&numOfRows=10&ServiceKey=자신의 서비스키";
try{
URL url= new URL(queryUrl);//문자열로 된 요청 url을 URL 객체로 생성.
InputStream is= url.openStream(); //url위치로 입력스트림 연결
XmlPullParserFactory factory= XmlPullParserFactory.newInstance();//xml파싱을 위한
XmlPullParser xpp= factory.newPullParser();
xpp.setInput( new InputStreamReader(is, "UTF-8") ); //inputstream 으로부터 xml 입력받기
String tag;
xpp.next();
int eventType= xpp.getEventType();
while( eventType != XmlPullParser.END_DOCUMENT ){
switch( eventType ){
case XmlPullParser.START_DOCUMENT:
buffer.append("파싱 시작...\n\n");
break;
case XmlPullParser.START_TAG:
tag= xpp.getName();//테그 이름 얻어오기
if(tag.equals("item")) ;// 첫번째 검색결과
else if(tag.equals("addr")){
buffer.append("주소 : ");
xpp.next();
buffer.append(xpp.getText());//title 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n"); //줄바꿈 문자 추가
}
else if(tag.equals("chargeTp")){
buffer.append("충전소타입 : ");
xpp.next();
buffer.append(xpp.getText());//category 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n");//줄바꿈 문자 추가
}
else if(tag.equals("cpId")){
buffer.append("충전소ID :");
xpp.next();
buffer.append(xpp.getText());//description 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n");//줄바꿈 문자 추가
}
else if(tag.equals("cpNm")){
buffer.append("충전기 명칭 :");
xpp.next();
buffer.append(xpp.getText());//telephone 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n");//줄바꿈 문자 추가
}
else if(tag.equals("cpStat")){
buffer.append("충전기 상태 코드 :");
xpp.next();
buffer.append(xpp.getText());//address 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n");//줄바꿈 문자 추가
}
else if(tag.equals("cpTp")){
buffer.append("충전 방식 :");
xpp.next();
buffer.append(xpp.getText());//mapx 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append(" , "); //줄바꿈 문자 추가
}
else if(tag.equals("csId")){
buffer.append("충전소 ID :");
xpp.next();
buffer.append(xpp.getText());//mapy 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n"); //줄바꿈 문자 추가
}
else if(tag.equals("cpNm")){
buffer.append("충전소 명칭 :");
xpp.next();
buffer.append(xpp.getText());//mapy 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n"); //줄바꿈 문자 추가
}
else if(tag.equals("lat")){
buffer.append("위도 :");
xpp.next();
buffer.append(xpp.getText());//mapy 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n"); //줄바꿈 문자 추가
}
else if(tag.equals("longi")){
buffer.append("경도 :");
xpp.next();
buffer.append(xpp.getText());//mapy 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n"); //줄바꿈 문자 추가
}
else if(tag.equals("statUpdateDatetime")){
buffer.append("충전기상태갱신시각 :");
xpp.next();
buffer.append(xpp.getText());//mapy 요소의 TEXT 읽어와서 문자열버퍼에 추가
buffer.append("\n"); //줄바꿈 문자 추가
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
tag= xpp.getName(); //테그 이름 얻어오기
if(tag.equals("item")) buffer.append("\n");// 첫번째 검색결과종료..줄바꿈
break;
}
eventType= xpp.next();
}
} catch (Exception e){
e.printStackTrace();
}
buffer.append("파싱 끝\n");
return buffer.toString();//StringBuffer 문자열 객체 반환
}//getXmlData method....
}
//참고
728x90
'Android-java' 카테고리의 다른 글
안드로이드 스튜디오-calendarview를 사용하고 일정을 저장하는 기능 (16) | 2020.04.29 |
---|---|
안드로이드 스튜디오-viewpager,cardview (0) | 2020.03.07 |
안드로이드 스튜디오-음성인식 사용하기 (6) | 2020.03.07 |
안드로이드 스튜디오-카카오톡 로그인 버튼 생성 및 클릭 이벤트 (4) | 2020.02.15 |
안드로이드 스튜디오-카카오톡 로그인 구현하기(카카오 개발자에 앱 등록 및 설정) (0) | 2020.02.15 |
Comments