Mission Completed

강사님 라이브러리를 사용한 AsyncTask의 doInBackground 메소드 본문

개발/Android 개발

강사님 라이브러리를 사용한 AsyncTask의 doInBackground 메소드

삼지안☆ 2013. 7. 23. 12:10

아래에서 파싱부분만 고쳐 사용하면 된다. URL은 res/values안에서 xml로 정의를 한 상태이다.
String.format처러 사용하지만 순서를 정해주어야 한다.
변수가 들어가는 부분은 %1$s 형식으로 번호는 순서를 의미하고 뒤 알파벳은 참조할 변수형을 의미한다.

@Override
protected Integer doInBackground(Object... params) {
	// 전체 데이터 수
	int count = 0;
	
	// 접속할 주소를 urls.xml로부터 얻어오기
	String xmlUrl = context.getResources().getString(R.string.daum_img_search, q, result, pageno);
	
	try {
		// XML 데이터 얻기 (라이브러리 사용)
		XmlPullParser parser = CXmlParser.getInstance().getXmlParser(xmlUrl);
		
		// XML 처리의 값 종류(START, END)
		int type = parser.getEventType();
		// XML 태그 이름
		String tag = null;
		
		/** 파싱된 값을 담기 위한 임시 변수 */
		// 제목
		String title = null;
		// 원문글의 링크 주소
		String link = null;
		// 원본 이미지 URL
		String image = null;
		// 원본 이미지의 가로 해상도
		int width = 0;
		// 원본 이미지의 세로 해상도
		int height = 0;
		// 글 작성일시
		String pubDate = null;
		// 작은 사이즈 이미지 주소
		String thumbnail = null;

		while (type != XmlPullParser.END_DOCUMENT) {
			tag = parser.getName();

			switch (type) {
			case XmlPullParser.START_TAG:
				if (tag.equals("title")) {
					title =parser.nextText();
				} else if (tag.equals("link")) {
					link = parser.nextText();
				} else if (tag.equals("image")) {
					image = parser.nextText();
				} else if (tag.equals("width")) {
					width =  Integer.parseInt(parser.nextText());
				}else if (tag.equals("height")) {
					height = Integer.parseInt(parser.nextText());
				} else if (tag.equals("pubDate")) {
					pubDate = parser.nextText();
				} else if (tag.equals("thumbnail")) {
					thumbnail = parser.nextText();
				}
				break;
			case XmlPullParser.END_TAG:
				if (tag.equals("item")) {
					count++;
					ImageItem item = new ImageItem(title, link, image, width, height, pubDate, thumbnail);
					this.publishProgress(item);
				}
				break;
			}
			type = parser.next();
		}
	} catch (HttpClientException e1) {
		msg = e1.getLocalizedMessage();
		Log.e("LIST_WORKER", "XML처리 실패됨");
		this.cancel(true);
	} catch (Exception e) {
		// XML 데이터 처리 실패
		msg = "XML처리 실패됨 (XML원문 문법오류)";
		this.cancel(true);
	}

	return count;
}

'개발 > Android 개발' 카테고리의 다른 글

잊어먹으면 찾게되는 DPI 크기  (0) 2014.04.11
Android Google맵 필기자료  (0) 2013.07.05
Android ImageDownloader  (0) 2013.06.28
asynctask - Android XML thread  (0) 2013.06.27
Android with SQLite  (0) 2013.06.26