현재 XML을 XmlPullParser 을 이용하여 파싱을 해오는것 까지는 성공을 했습니다.
하지만 스레드를 이용해서 프로그래스다이알로그로 로딩페이지를 띄우고 스레드가 값을 다가져온후
커스텀리스트뷰로 보여주고 싶은데 어떻게 해야할까요?
혹시나하는 마음에 소스를 올려봅니다. 고수님들의 의견과 도움을 구하고자 글을 올립니다.^^
가능하시다면 상세한 설명(소스주시면 다은생에 졸부의 아들로 태어나 편안한 인생을 사실꺼에요^^)을 주신다면 감사하겠습니다^^
package EIP.GW.EMAIL;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import EIP.GW.IconTextView;
import EIP.GW.IconTextItem;
import EIP.GW.IconTextListAdapter;
import EIP.GW.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
public class Email_List extends Activity {
ListView myListview;
IconTextView temp;
ArrayList<XmlData> m_xmlData = new ArrayList<XmlData>();
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
myListview = (ListView)findViewById(R.id.myListview1);
final IconTextListAdapter adapter = new IconTextListAdapter(this, 1);
m_xmlData = getXmlData();
Iterator<XmlData> it = m_xmlData.iterator();
while (it.hasNext()) {
XmlData xmlData = it.next();
adapter.addItem(new IconTextItem(xmlData.PN_ALIES, xmlData.EM_RECEIVEDT, xmlData.EM_SUBJECT));
}
myListview.setAdapter(adapter);
}
public ArrayList<XmlData> getXmlData() {
String m_sConnectUrl = "XML주소";
XmlData xmlData = null;
String sTag;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
URL u = new URL(m_sConnectUrl);
InputStream in = u.openStream();
parser.setInput(in, "utf-8");
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.START_TAG:
sTag = parser.getName();
xmlData = new XmlData();
if (sTag.equals("EMAIL")) {
xmlData.EM_MSGID = parser.getAttributeValue(null, "EM_MSGID");
xmlData.EM_SUBJECT = parser.getAttributeValue(null, "EM_SUBJECT");
xmlData.EM_RECEIVEDT = parser.getAttributeValue(null, "EM_RECEIVEDT");
xmlData.PN_ALIES = parser.getAttributeValue(null, "PN_ALIES");
}
break;
case XmlPullParser.END_TAG:
sTag = parser.getName();
if (sTag.equals("EMAIL")) {
m_xmlData.add(xmlData);
xmlData = null;
}
break;
case XmlPullParser.TEXT:
break;
}
eventType = parser.next();
}
} catch (Exception e) {
// TODO: handle exception
}
return m_xmlData;
}
}
sub thread 하나 생성하셔서 xml pasing 은 이 thread 해서 parsing 하도록 처리하시고,
ui thread 에서 생성한 handler 를 이 sub thread 에 넘기도록 처리하셔서,
xml parsing 이 끝난후 ui thread의 handler 를 이용하셔서 sendMessage 하시면
ui 에 원하는 데이터를 그리실 수 있습니다.