마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 XML파싱시 문제가 있습니다. 도와주세요 ㅠ

0 추천

public class select_Thread extends Activity implements Runnable {
	public static ArrayList<Thread_result> rdata = new ArrayList<Thread_result>();

	Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			if (msg.obj != null)
				rdata.add((Thread_result) msg.obj);
		}

	};

	public void run() {

		try {
			String enter = "basic_select_copy";
			URL connection = new URL("http://203.247.41.242/" + enter + ".php");
			connection.openStream();
			URL server = new URL("http://203.247.41.242/" + enter + ".xml");

			XmlPullParserFactory parserCreator = XmlPullParserFactory
					.newInstance();
			XmlPullParser parser = parserCreator.newPullParser();
			InputStream is = server.openStream();

			parser.setInput(is, "UTF-8");

			int parserEvent = -1;
			String START = "";
			String TEXT_TAG = "deflut";
			String END = "";
			String nameTag = null, Number = null, locationTag = null;

			while (parserEvent != XmlPullParser.END_DOCUMENT) {

				switch (parserEvent) {
				case XmlPullParser.START_TAG:
					START = parser.getName();
//					Log.i("START", parser.getName());
					break;

				case XmlPullParser.TEXT:
					TEXT_TAG = parser.getText();
//					Log.i("TEXT", parser.getText());
					break;

				case XmlPullParser.END_TAG:
					END = parser.getName();
//					Log.i("END", parser.getName());
					break;

				}
				Message msg = Message.obtain();

				if (START.equals(END)) {
					//Log.i("START", START);
					if (START.equals("item_number")) {
						Number = "test";
						Number = TEXT_TAG;
						Log.i("here1", Number);

					} else if (START.equals("name")) {
						nameTag = TEXT_TAG;
						Log.i("here2", Number);
					} else if (START.equals("location")) {
						locationTag = TEXT_TAG;
//						Log.i("name", nameTag);
						Log.i("number", Number);
//						Log.i("loca", locationTag);
						Thread_result tdata = new Thread_result(nameTag, Number, locationTag);
						msg.what = 3;
						msg.obj = tdata;
						Log.i("tdata", tdata.getNumber());
						handler.sendMessage(msg);
					}

				}

				parserEvent = parser.next();
			}

위는 자바 소스 파일이고요 XML파일 파싱한 뒤 START태그와 END태그가 같으면 내용을 TEXT_TAG 에 저장합니다. 그리고 그 TEXT_TAG의 내용하고 값을 비교해서 객체를 선언한뒤 핸들러로 객체를 반환하는 내용입니다.

아래는 XML파일입니다. 

<?xml version = "1.0" encoding = "utf-8"?>
<DB_20080918>
<data>
<department>정보통신공학과</department>
<item_number>001</item_number>
<name>WCDMA 시스템장비</name>
<manager>기타</manager>
<location>1</location>
<use>교보재</use>
<state>양호</state>
<price>12000000 </price>
<user></user>
<invest_date></invest_date>
<purchase_date></purchase_date>
<dump_data></dump_data>
</data>
<data>
<department>정보통신공학과</department>
<item_number>002</item_number>
<name>WCDMA 시스템장비</name>
<manager>기타</manager>
<location>1</location>
<use>교보재</use>
<state>양호</state>
<price>12000000 </price>
<user></user>
<invest_date></invest_date>
<purchase_date></purchase_date>
<dump_data></dump_data>
</data>
<data>
<department>정보통신공학과</department>
<item_number>003</item_number>
<name>WCDMA 시스템장비</name>
<manager>기타</manager>
<location>1</location>
<use>교보재</use>
<state>양호</state>
<price>12000000 </price>
<user></user>
<invest_date></invest_date>
<purchase_date></purchase_date>
<dump_data></dump_data>
</data>
</DB_20080918>

문제는 Thread_result tdata = new Thread_result(nameTag, Number, locationTag); 

분입니다. 객체를 만들 시 nameTag와 locationTag는 값이 정상적으로 전달되는데 비하여 Number은 

if (START.equals("item_number")) {
						Number = "test";
						Number = TEXT_TAG;
						Log.i("here1", Number);

					} 

에서는 값이 정상적으로 나오는데 객체를 생성 할  시 아무런 값도 찍히지 않습니다. 

아래는 로그캣과 Thread_result 클래스 입니다.

05-09 08:54:17.379: I/dalvikvm-heap(16872): Grow heap (frag case) to 13.174MB for 1127536-byte allocation
05-09 08:54:19.574: I/here1(16872): 001
05-09 08:54:19.574: I/here1(16872): 002
05-09 08:54:19.574: I/here1(16872): 003
05-09 08:54:19.579: I/here1(16872): 004
05-09 08:54:19.579: I/here1(16872): 005
05-09 08:54:19.584: I/here1(16872): 006
05-09 08:54:19.584: I/here1(16872): 007
05-09 08:54:19.589: I/here1(16872): 008
05-09 08:54:19.589: I/here1(16872): 009
05-09 08:54:19.594: I/here1(16872): 010
05-09 08:54:19.599: I/here1(16872): 011
05-09 08:54:19.599: I/here1(16872): 012
05-09 08:54:19.604: I/here1(16872): 013
05-09 08:54:19.979: I/Choreographer(16872): Skipped 39 frames!  The application may be doing too much work on its main thread.
package com.example.final_project;

import android.os.Message;


public class Thread_result {
    public String mName;
    public String mNumber;
	public String mlocation;
	public Thread_result(String name, String number, String location){
		mName=name;
		mNumber=number;
		mlocation=location;
	}

	public String getName(){
		return mName;
		
	}
	public String getNumber(){
		return mNumber;
		
	}
	public String getlocation(){
		return mlocation;
		
	}
}

 

익명사용자 님이 2014년 5월 9일 질문
2014년 5월 9일 수정

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...