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;
}
}