//---------------------------------------------------------------------------------------------------------//
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
//---------------------------------------------------------------------------------------------------------//
list = (ListView)findViewById(R.id.listview);
mntdataList = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mntdataList);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(),Test.class);
intent.putExtra("Height",mntHeight);
startActivityForResult(intent,0);
}
});
//----------------------------------------------------------------------------------------------------------
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
adapter.clear(); //어뎁터,리스트를 초기화시켜 새로운 데이터를 받음
mntdataList.clear();
adapter.notifyDataSetChanged();
NetworkThread thread = new NetworkThread();
thread.start();
}
});
}
class NetworkThread extends Thread{
public void run(){
call();
}
}
Handler handler = new Handler(){
public void handleMessage(Message msg){
if(msg.what ==0){
adapter.notifyDataSetChanged();
}
}
};
public void call(){
HttpURLConnection urlConnection = null;
try {
URL url = new URL(addr);
urlConnection = (HttpURLConnection) url.openConnection(); //url 연결
InputStream in = urlConnection.getInputStream(); //url내용을 비트형으로읽어옴
InputStreamReader isr = new InputStreamReader(in); // 뭐더라 다시 리더로 변환해주는과정
BufferedReader buf = new BufferedReader(isr); //줄단위로 읽어주기위해 실행
sb = new StringBuffer(); //buf의 한줄 한줄 값을 입력받아 한꺼번에 출력시키기 위해 사용
while (true) {
readLine = buf.readLine();
if (readLine == null) //읽어올 값이 없으면
break; //멈춤 그렇지않으면
sb.append(readLine); //스트링버퍼에 리드라인 내용 계속 추가
sb.append("\n"); //이게없으면 줄바꿈이없어서 알아보기가힘듦. buf의 줄바꿈단위마다 실행
}
tv = sb.toString();
parsing();
//handler.sendEmptyMessage(0); //핸들러호출
}
catch (Exception e) {
}
finally {
if (urlConnection != null) {
urlConnection.disconnect();
}}}
public void parsing(){
try{
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
xpp = factory.newPullParser();
xpp.setInput(new StringReader (tv.trim()));
eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){ //최초 title테그안에 쓸데없는 내용이 있어서 추가해줬음.
if(eventType == XmlPullParser.START_TAG){ //ex)RSS 한경닷컴어쩌구저쩌구 제목과상관없는내용
String tagName2 = xpp.getName();
if(tagName2.equals("gdTrailInfo")){ //아이템 테그 이후부터 검색시작
while (eventType != XmlPullParser.END_DOCUMENT){
if(eventType == XmlPullParser.START_TAG){ //스타트테그를 만나면 테그값 저장
tagName = xpp.getName();
}
else if(eventType == XmlPullParser.TEXT){ //스타트테그가 아니라 텍스트일경우
if(tagName!=null){ //텍스트가 쓰래기값인경우를 배제
if(tagName.equals("mntNm")){ //필요한건 타이틀과 본문이기때문에 스타트테그는 타이틀일때 실행
mntNm = xpp.getText().trim();
if (mntNm.length() > 0) { //여기도 한경닷컴특성상 제목 \n 공백 \n 제목 이런식으로돼있어서 추가
mntdataList.add(mntNm);
}
}else if(tagName.equals("mntHeight")){
mntHeight = xpp.getText().trim();
}
}
}
eventType = xpp.next();
}}}
eventType = xpp.next();
}
}catch (Exception e){
}
}
}
XmlPullParser를 통해서 api에 접근해서 ListView로 뽑아오는 코드입니다.
에러같은 건 하나도 없는데요
mntNm이 ListView에 뜨지 않습니다...
그래서 데이터가 제대로 파싱되지 않았나 했었는데 다른 어플을 만지다가 확인해보니 또 리스트가 나와있더군요
제가 원하는 데이터들만 나와있었습니다.
그러고 나서 버튼을 눌러 다시 파싱을 시작하니까 리스트가 다 사라지면서 다시 나타나질 않습니다.
이제 막 안드로이드를 공부하고 있어서 너무 어렵네요 ㅠㅠ