Adapter.java 랑 S_BusData.java는 그렇게 중요하지 않아서 생략했어요
제가 안되는 점은 데이터를 받아서, 저장까지는 되는걸 확인을 했어요
저장된 걸, 리스트뷰를 통해서 보여줘야하는데, 안보여주네요 .. ㅠㅠ 어디서 문제가 있는 걸까요 ?? ㅠㅠ
package com.example.busalram;
import java.net.URL;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.content.ClipData.Item;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class SeoulBus extends Activity{
private ArrayList<S_BusData> contacts = new ArrayList<S_BusData>();
private PoemAdapter ap;
private ListView lv;
private ArrayList<String> arsId, stNm, rtNm, traTime2, traTime1;
String BusNumber_Main;
public ArrayList<Poem> listPoem = null;
int time=0;
private Runnable ListViewUI = new Runnable(){
public void run(){
SeoulBus.this.ap.notifyDataSetChanged();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.daejon);
//쓰레드에서 외부 URL을 사용하기 위한 StrictMode 작업
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Intent intent = getIntent();
BusNumber_Main = intent.getStringExtra("BusNumber");
//if(BusNumber_Main == null){ BusNumber_Main = "24002"; }
//else{ BusNumber_Main = "24002"; }
//getPoem();
XMLParser XML = new XMLParser();
try{
XML.start();
} catch(Exception e){
XML.interrupt();
}
lv = (ListView)findViewById(R.id.buslist);
ap = new PoemAdapter(this, R.layout.row, contacts);
lv.setAdapter(ap);
setListViewHeightBasedOnChildren(lv);
}
private void addItem(S_BusData item){
this.contacts.add(item); //ListView에 출력시키기 위해 배열리스트 추가
this.runOnUiThread(ListViewUI); //화면에 출력시키기 위한 갱신
/* 올바르게 데이터가 저장되어있는지 확인하기 위한 Toast메시지 */
//Toast.makeText(getBaseContext(), contacts.get(0).getstNm()+"/"+time, Toast.LENGTH_LONG).show();
//time++;
}
private void setListViewHeightBasedOnChildren(ListView lv) {
// TODO Auto-generated method stub
ListAdapter listAdapter = lv.getAdapter();
if(listAdapter == null){ return; }
int desiredWidth = MeasureSpec.makeMeasureSpec(lv.getWidth(),
MeasureSpec.UNSPECIFIED);
int totalHeight = 0;
View view = null;
for(int i=0; i<listAdapter.getCount(); i++){
view = listAdapter.getView(i, view, lv);
if(i==0){ view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,LayoutParams.WRAP_CONTENT));}
view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += view.getMeasuredHeight();
}
ViewGroup.LayoutParams params = lv.getLayoutParams();
params.height = totalHeight + (lv.getDividerHeight() * (lv.getCount() - 1));
lv.setLayoutParams(params);
lv.requestLayout();
}
//데이터 처리 쓰레드
class XMLParser extends Thread{
boolean mHandler = new Handler().post(new Runnable(){
@Override
public void run(){
arsId = new ArrayList<String>(); //정류장ID
stNm = new ArrayList<String>(); //정류소번호
rtNm = new ArrayList<String>(); //버스 번호
traTime1 = new ArrayList<String>(); //첫번째 도창예정정보
traTime2 = new ArrayList<String>(); //두번째 도착예정정보
String ServiceKey = "?ServiceKey=4JBUNZv1Lt67AZf1v6T3sH1hU7V3IsVmz53wg%2F%2FipCNOVxZn2X4bqhAs8Gm1%2FBVrjrYAOzE1XVOWJcKdXm5qxw%3D%3D";
String FullURL = "http://ws.bus.go.kr/api/rest/stationinfo/getStationByUid?ServiceKey=4JBUNZv1Lt67AZf1v6T3sH1hU7V3IsVmz53wg%2F%2FipCNOVxZn2X4bqhAs8Gm1%2FBVrjrYAOzE1XVOWJcKdXm5qxw%3D%3D&arsId=";
FullURL += BusNumber_Main;
try{
URL InputURL = new URL(FullURL);
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
//XmlPullParser 사용하기 위한 생성
XmlPullParser parser = parserCreator.newPullParser();
parser.setInput(InputURL.openStream(), null);
int parserEvent = parser.getEventType();
String tag;
boolean A=false, B=false, C=false, D=false, E=false;
while(parserEvent != XmlPullParser.END_DOCUMENT){
//여기서부터 XML파싱
switch(parserEvent){
case XmlPullParser.TEXT:
tag = parser.getName();
if(A){
String max = parser.getText();
arsId.add(max);
}
else if(B){
String max = parser.getText();
stNm.add(max);
}
else if(C){
String max = parser.getText();
rtNm.add(max);
}
else if(D){
String max = parser.getText().toString();
traTime1.add(max);
}
else if(E){
String max = parser.getText();
traTime2.add(max);
}
break; //첫번째 case 끝
case XmlPullParser.END_TAG: // 나중에
tag = parser.getName();
if (tag.compareTo("arsId") == 0) {
A = false;
}
else if (tag.compareTo("rtNm") == 0) {
B = false;
}
else if (tag.compareTo("stNm") == 0) {
C = false;
}
else if (tag.compareTo("traTime1") == 0) {
D = false;
}
else if (tag.compareTo("traTime2") == 0) {
E = false;
}
break;
case XmlPullParser.START_TAG:
tag = parser.getName();
if (tag.compareTo("arsId") == 0) {
A = true;
}
else if (tag.compareTo("rtNm") == 0) {
B = true;
}
else if (tag.compareTo("stNm") == 0) {
C = true;
}
else if (tag.compareTo("traTime1") == 0) {
D = true;
}
else if (tag.compareTo("traTime2") == 0) {
E = true;
}
break;
} //switch 끝
parserEvent = parser.next();
} // while 끝
} //try 끝
catch(Exception e){
Log.e("Input/Error", "headerCd XmlPullParserFactory", e);
}
try{
/* 파싱한 XML데이터를 contacts 배열리스트에 저장 */
S_BusData item = new S_BusData();
contacts = new ArrayList<S_BusData>();
for (int loop = 0; loop < arsId.size(); loop++) {
item.setrtNm(rtNm.get(loop));
item.setstNm(stNm.get(loop));
addItem(item);
}
Toast.makeText(getBaseContext(), "서울버스 ["+stNm.get(0)+"]를 검색합니다.", Toast.LENGTH_LONG).show();
}
catch(Exception e){
Toast.makeText(getBaseContext(), "결과가 없습니다.\n정류소번호 및 정류소이름을\n확인 후 재검색바랍니다.", Toast.LENGTH_LONG).show();
Log.e("Output/Error", "ArrayList Data Zero...", e);
}
}
});
}
/* 리스트뷰를 맨처음 초기화 시켜주기 위한 작업 */
public void onResume(){
super.onResume();
String stNm;
String rtNm;
int itemCount=2;
for(int i=0; i<itemCount; i++){
S_BusData item = new S_BusData();
item.setstNm("단대오거리(구)종점");
item.setrtNm("100성남");
item.settraTime1("1분");
this.addItem(item);
}
}
}
단순히 제가 보기엔 저 노란색글씨로 된부분이 문제인거같은데... 갱신이 안되는게 문제일까요 ?
근데 갱신이 안되는 걸 테스트해보려고 Toast로 확인했는데, 갱신될 때마다 문자가 바뀌어서 나타나요 - - ;
결국엔 ListView 출력만 안되고있는데 ... ㅠㅠㅠㅠ 도와주세요
어디부분을 어떻게 고쳐야하나요 ? ㅠ