안드로이드 개발 질문/답변
(글 수 45,052)
package com.html.net;
import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap;
import net.htmlparser.jericho.Element; import net.htmlparser.jericho.HTMLElementName; import net.htmlparser.jericho.Source; import android.app.ProgressDialog; import android.content.Context; import android.os.Handler;
public class Net_HTMLParse
{
private String url;
private Context context;
private Handler handler;
private ProgressDialog progressDialog;
private Source source;
private ArrayList<HashMap<String, String>> data;
public Net_HTMLParse(Context context, Handler handler, ArrayList<HashMap<String, String>> data)
{
this.context = context;
this.handler = handler;
this.data = data;
}
public void open()
{
url = "http://dorm.chungbuk.ac.kr/pub/board/bbs_free.html?cboardID=noti040101";
//처리하기
try
{
process();
}catch(IOException e)
{
e.printStackTrace();
}
}
private void process() throws IOException
{
//상태 Progress 띄우기 위해서 사용함!
final Handler mHandler = new Handler();
new Thread()
{ @Override
public void run()
{
URL nURL;
try
{
nURL = new URL("url);
mHandler.post(new Runnable(){ public void run()
{
progressDialog = ProgressDialog.show(context, "", "잠시만 기다려주세요^^");
}
});
//모든 데이터 초기화
data.clear();
InputStream html = nURL.openStream();
//가져오는 HTML의 인코딩형식
source = new Source(new InputStreamReader(html, "EUC-KR"));
//테이블가져오기
Element table = (Element) source.getAllElements(HTMLElementName.TABLE).get(13);
System.out.println("테이블 개수!!!!" + source.getAllElements(HTMLElementName.TABLE).size());
//테이블 안의 TR 개수
int tr_count = table.getAllElements(HTMLElementName.TR).size();
Element tr = null;
HashMap<String, String> hm = null;
for(int i=1; i<tr_count; i++)
{
tr = (Element) table.getAllElements(HTMLElementName.TR).get(i);
hm = new HashMap<String, String>();
hm.put("no", ((Element) tr.getAllElements(HTMLElementName.TD).get(0)).getContent().toString());
hm.put("title", ((Element) tr.getAllElements(HTMLElementName.TD).get(1)).getContent().toString());
hm.put("writer", ((Element) tr.getAllElements(HTMLElementName.TD).get(2)).getContent().toString());
hm.put("subject", ((Element) tr.getAllElements(HTMLElementName.TD).get(3)).getContent().toString());
data.add(hm);
}
mHandler.post(new Runnable()
{
public void run()
{
progressDialog.cancel();
//업데이트 완료를 핸들러로 보내줌
handler.sendEmptyMessage(0);
}
});
}catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}.start();
}
}
안드로이드어플을 처음 만드는 학생입니다..
요 예제 소스를 인터넷에서 구했는데 이소스를 이용해서 html 파싱을 해오고 싶습니다.
페이지는 dorm.chungbuk.ac.kr 이구요
여기서 공지사항, 자유게시판, 건의사항/Q&A 이렇게 파싱해서 보여주고 싶어요
탭과 listview로 목록은 만들었는데, 그 목록을 눌렀을때 공지사항게시판 글 목록> 다시 누르면 글 내용
이렇게 나오게 하고싶은데, 응용하는데 너무 어렵더라구요 ㅜ
공지사항 페이지는 http://dorm.chungbuk.ac.kr/pub/board/bbs_free.html?cboardID=noti040101 입니다.......
소스를 봤는데 이거 영...처음 만들다보니 응용하는게 어려워요
글 목록이 나오는건 14번째 테이블인거 같은데 맞게 본건지 모르겠습니다
이번주내로 완성해야하는데...도와주세요!!!부탁드립니다ㅜㅜ
참, 그리고 공지사항은 다읽었어요!




저도 이 예제 보고 편집할라했는데.. 이런식으로 찾는건 좀 무리가있을거같더라구요...
테이블 몇번째인지 찾아서 하는거 자체가 좀 무리가있고...
jericho파서에 좀더 뜯어보면 쓸만한게 나올거같기도한데 어렵더라구요..
xpath 이용해서 해볼라하는데 xml만 되는건지 HTML 파싱도 되는건지 잘 모르겠어요
아이폰 개발할때는 xpath 사용해서 파싱하던데... 안드로이드에서는...
http://jericho.htmlparser.net/docs/javadoc/index.html
http://developer.android.com/reference/javax/xml/xpath/package-summary.html