Transcript Android XML

android
Android-Xml
(DMI) Kang GiHoon
Android XML
 일반적인 java xml 파일 처리.
 parser의 종류
 dom parser
 sax parser
 pull sax parser
 일반적으로 android의 resource 한계상 대용량 xml 파
일 프로세싱에 효율적인 sax parser를 사용
특별히 기본 sax parser의 변형인 단순한 형태의 pull sax
parser 를 많이 사용함.
DMI--Kang Gihoon
Android XML – XmlPullParser




XML Pull Parser (XPP)
Sax parser 의 변형 (단순하고 빠른 parsing)
android 에선 v1 지원.
사용방법
- XmlPullParserFactory parser 팩토리 클래스 생성
- parser 팩토리 클래스로 부터 XmlPullParser 클래스 생성.
- setInput(Reader in) 함수로 부터 Input xml Reader 생성
- parser.next() 으로 부터 해당 문서 태그 식별 후 해당 이벤트 발생 하는 곳에서 적절히 처리
XmlPullParser.START_DOCUMENT : xml 문서 root 태그를 만날때
XmlPullParser.START_TAG : Element시작 태그를 만날때
XmlPullParser.END_TAG : Element종료 태그를 만날때
XmlPullParser.TEXT : Element 내의 텍스트 내용을 만날때
XmlPullParser.END_DOCUMENT : xml 문서의 종료 태그를 만날때
DMI--Kang Gihoon
Android XML – Example
 포스퀘워 openapi xml
http://api.foursquare.com/v1/venues?geolat=37.518985&geolong=127.048645&l=30
: 경도와 위도정보를 주면 주변의 관련 정보를 줌.
: l=30은 list의 개수.
xml 파일내용
<venues>
<group type="Nearby">
- <venue>
<id>2335652</id>
<name>앤젤리너스 청담</name>
- <primarycategory>
<id>78959</id>
<fullpathname>Arts & Entertainment:Arcade</fullpathname>
<nodename>Arcade</nodename>
<iconurl>http://foursquare.com/img/categories/arts_entertainment/arcade.png</iconurl>
</primarycategory>
<address />
<city/>
<state/>
<verified>false</verified>
<geolat>37.518822</geolat>
<geolong>127.049328</geolong>
- <stats>
<herenow>0</herenow>
</stats>
<distance>62</distance>
</venue>
...
DMI--Kang Gihoon
Android XML – Example
 <Venue> 태그는 Venue 클래스 생성
 <primarycategory> 태그는 PrimaryCategory 클래스 생성 후 Venue의 하위클래스로 위치
 예제에서 <stats> 정보는 사용하지 않음.
*XmlPullParser.START_TAG : 객체생성
*XmlPullParser.END_TAG : 데이터 세팅.
*XmlPullParser.TEXT: 텍스트 데이터 임시 저장
while(isParsing) {
int next = parser.next();
switch (next) {
case XmlPullParser.START_DOCUMENT: break;
case XmlPullParser.START_TAG:
if(parser.getName().equals("venue")) {
venue = new Venue();
venue.setIconDrawable(defaultDrawable);
isVenueTag = true;
}else if(parser.getName().equals("primarycategory")) {
primaryCategory = new PrimaryCategory();
isPrimarycategory = true;
}
case XmlPullParser.END_TAG:
if(parser.getName().equals("venue")) {
venueList.add(venue);
}else if(parser.getName().equals("primarycategory")) {
venue.setPrimaryCategory(primaryCategory);
}
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_DOCUMENT:
isParsing = false;
break;
default:
break;
}
DMI--Kang Gihoon
Android XML – Example (Foursquar List 구현)
 list 화면 설계
 xml 파싱을 통한 foursquare api 설계
 xml 파싱후 웹상의 foursquare category icon 이미지 Decoding
 xml api 의 호출 후 데이터 내용 을 리스트에 뿌린다.
 일정한 Thread Pool을 이용하여 웹상의 각 카테고리 이미지 항목들을 decoding 하여 사용자 응답
시간을 줄인다.
 일정시간 이후 응답이 없을 경우 네트웍 문제 또는 시간 초과라는 메시지로 사용자에게 알려 줌으로 사
용자로 부터 기다리지 않게 한다.
DMI--Kang Gihoon
Android XML – Example (Foursquare List 구
현)
 list 화면 설계
*카테고리 아이콘 (ImageView)
android:id="@+id/icon"
venue이름 (TextView)
android:id="@+id/venueName“
android:layout_toRightOf="@id/icon"
주소 (TextView)
android:id="@+id/venueLocationLine1“
android:layout_toRightOf="@id/icon“
android:layout_below="@id/venueName"
아래 View를 감싸고 있는 LinearLayout
android:orientation="horizontal"
android:layout_toRightOf="@id/icon"
현재 위치로 부터 거리 (TextView)
LinearLayout 내의 수평요소
체크 카운트 (TextView)
LinearLayout 내의 수평요소
DMI--Kang Gihoon