public class parsing extends Activity {
static int number;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.englandtok);
lv = (ListView) findViewById(R.id.listView); // ListView를 보여주는 부분
sa = new SimpleAdapter(this, list_board, R.layout.row_board1,
new String[] { "subject", "rowid", "reg_date", "power", "good",
"bob", "content", "hit", "img" }, new int[] {
R.id.board_subject, R.id.board_date, R.id.board_writer,
R.id.imageView1, R.id.textView3, R.id.textView2,
R.id.textView1, R.id.imageView3, R.id.imageView1 });
lv.setAdapter(sa);
contents = new ArrayList<String>();
lv.setAdapter(sa);
lv.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
// Log.v(TAG, "onScroll");
Log.v(TAG, "firstVisibleItem = " + firstVisibleItem);
Log.v(TAG, "visibleItemCount = " + visibleItemCount);
Log.v(TAG, "totalItemCount = " + totalItemCount);
int count = totalItemCount - visibleItemCount;
int total = firstVisibleItem + visibleItemCount;
if (firstVisibleItem >= count && totalItemCount != 0 && mLockListView == false) {
if(total == totalItemCount){
rssParse(); //파싱다시시작
//addItems();
}
}
}
});
// //
rssParse();
}
public void rssParse() {
mLockListView = true;
number=number+1;
Log.i("aaaaa", ""+number);
final Handler mHandler = new Handler();
new Thread() {
public void run() throws IndexOutOfBoundsException {
list_board.clear();
// status.setText("파싱 시작함"); //
// 데이터 가지고 오기 시작
try {
//HttpPostData();
URL text = new URL("http://126.0.0.1/db/xml/england.php?page=number"); // 주소확인
// 바래요!
XmlPullParserFactory parserCreator = XmlPullParserFactory
.newInstance();
XmlPullParser parser = parserCreator.newPullParser();
parser.setInput(text.openStream(), null);
int parserEvent = parser.getEventType();
String tag = "";
boolean inTitle = false; // 제목여부판단
boolean inItem = false; // 아이템변경 판단
boolean inWriter = false; // 작성자 판단
boolean inDate = false; // 작성일
boolean inContent = false; // 내용
boolean inpage = false;
boolean inbob = false;
boolean inhit = false;
int count = 0;
contents.clear(); // 가지고왔던 콘텐츠를 모두 삭제함
String str;
do {
Log.i("test", "" + count);
switch (parserEvent) {
case XmlPullParser.TEXT:
tag = parser.getName();
// 제목
if (inItem && inTitle) {
str = parser.getText();
map.put("subject", str);
}
// 작성일
if (inItem && inDate) {
str = parser.getText();
map.put("reg_date", str);
}
// 작성자
if (inItem && inWriter) {
str = parser.getText();
map.put("rowid", str);
}
if (inItem && inpage) {
str = parser.getText();
map.put("good", str);
}
if (inItem && inbob) {
str = parser.getText();
map.put("bob", str);
if (str.length() >= 0) {
map.put("img", R.drawable.e);
}
}
if (inItem && inhit) {
str = parser.getText();
if (str.length() == 1) {
map.put("hit", R.drawable.wow);
} else if (str.length() == 2) {
map.put("hit", R.drawable.no);
}
}
// 내용
if (inItem && inContent) {
str = parser.getText();
if (str.length() > 0) {
map.put("content", str);
map.put("power", R.drawable.star1);
// contents.add(str);
} else if (str.length() < 3) {
map.put("content", str);
map.put("power", R.drawable.star);
}
}
break;
case XmlPullParser.END_TAG:
tag = parser.getName();
// 태그가 끝나면...
if (tag.compareTo("data") == 0) {
inItem = false;
list_board.add(map);
}
if (tag.compareTo("subject") == 0) {
inTitle = false;
}
if (tag.compareTo("rowid") == 0) {
inWriter = false;
}
if (tag.compareTo("reg_date") == 0) {
inDate = false;
}
if (tag.compareTo("content") == 0) {
inContent = false;
}
if (tag.compareTo("page") == 0) {
inpage = false;
}
if (tag.compareTo("bob") == 0) {
inbob = false;
}
if (tag.compareTo("hit") == 0) {
inhit = false;
}
break;
case XmlPullParser.START_TAG:
tag = parser.getName();
Log.i("test", "tag START " + tag);
// 시작하는 태그
if (tag.compareTo("data") == 0) {
inItem = true;
map = new HashMap<String, Object>();
}
//
if (tag.compareTo("subject") == 0) {
inTitle = true;
}
//
if (tag.compareTo("rowid") == 0) {
inWriter = true;
}
//
if (tag.compareTo("reg_date") == 0) {
inDate = true;
}
//
if (tag.compareTo("content") == 0) {
inContent = true;
}
if (tag.compareTo("page") == 0) {
inpage = true;
}
if (tag.compareTo("bob") == 0) {
inbob = true;
}
if (tag.compareTo("hit") == 0) {
inhit = true;
}
break;
}
// status.setText("파싱중: " + String.valueOf(count));
parserEvent = parser.next();
count++;
System.out.println("읽었을걸!");
} while (parserEvent != XmlPullParser.END_DOCUMENT);
Log.d("englandtok", "list_board.size : " + list_board.size()); //20
} catch (Exception e) {
Log.i("AAA", "AAAAAAAAAAAAAA" + e);
}
mHandler.post(new Runnable() {
public void run() {
pd.cancel();
sa.notifyDataSetChanged();
mLockListView = false;
}
});
// Log.i("test", e.toString());
// String str = "data : \n";
// str += "subject : " + map.get("subject")+"\n";
// str += "rowid : " + map.get("rowid") +"\n";
// str += "reg_date : " + map.get("reg_date")+"\n";
// str += "content : " + map.get("content");
//
// status.setText(str);
// pd.dismiss();
}
}.start();
}
}
제가 소스를 이렇게짯습니다..
url도 rssparse()를 부를때마다 +1값을 주어서 주소값 갱신도 되는데..
if문서 rssparse()를 다시 파싱해올라면은 IndexOutOfBoundsException에러가나면서..파싱이안되네요..ㅠ
주소값에 따라서 다시 파싱을 해올려고하는데..답변좀 부탁드립니다..ㅠㅠ