안녕하세요 어플개발을 좋아하기만하는 초보개발자인데요 ㅠㅠ..
고등학교 어플리케이션을 만들려고 학교홈페이지에 잇는 급식을 파싱해서 어플에 맛깔나게 사용하고싶은데..
워낙초보라서 정말노력안한것처럼 보일수잇으시지만.. 일주일동안 파서예제만 계속보고 이게 어떤동작인지
공부를햇는데도 너무 어렵더라고요 ㅠㅠ 이게 학교홈페이지가 xml형식이아니라 html이라서 애가 잘안먹히는거같아요..
그래도 어찌어찌 이것저것 손봐서 여기까진왓는데 저기 출력까진 해결이됬습니다
그런데 파싱내용이 if문에서 갈라지는게 아니라 그대로 합쳐져서 나와서 미치겟습니다 ㅠㅠ
이걸 해결할수잇는 방법을 알려주시면 정말 감사드리겠습니다..
혹시 XmlPullParser말고도 더효과적인 방법 dom이나 sax htmlclean jericho 말고 잇다면 알려주시길바랍니다 ㅠㅠ
package com.example.donggwanghighschool;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.R.string;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.NetworkOnMainThreadException;
import android.widget.TextView;
import android.widget.Toast;
public class FoodActivity extends Activity {
ProgressDialog mProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.food);
mProgress = ProgressDialog.show(FoodActivity.this, "준비중","잠시만기달려주세요 ^^");
Calendar cal =Calendar.getInstance();
cal.setTime(new Date(System.currentTimeMillis()));
String date = new SimpleDateFormat("yyyy.MM.dd").format(cal.getTime());
//DownThread thread = new DownThread(urlAdd);
thread.start();
}
class DownThread extends Thread{
String mAddr;
public DownThread(String addr) {
mAddr = addr;
}
public void run(){
String result = DownloadHtml(mAddr);
Message message = mAfterDown.obtainMessage();
message.obj = result;
mAfterDown.sendMessage(message);
}
@SuppressLint("NewApi")
String DownloadHtml(String addr){
StringBuilder html = new StringBuilder();
try{
URL url = new URL(addr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(),"euc-kr"));
for(;;){
String line = br.readLine();
if(line == null)break;
html.append(line + '\n');
}
br.close();
}
conn.disconnect();
}
}catch (NetworkOnMainThreadException e){
return "Error : 메인 스레드 네트워크 작업 에러 - " +e.getMessage();
}catch(Exception e){
return "Error : " + e.getMessage();
}
return html.toString();
}
}
Handler mAfterDown = new Handler(){
public void handleMessage(Message msg){
mProgress.dismiss();
TextView result1 = (TextView)findViewById(R.id.TextViewFood01);
TextView result2 = (TextView)findViewById(R.id.TextViewFood02);
String html = (String)msg.obj;
boolean initem = false;
String ItemName01 = "";
String ItemName02 = "";
String str[] = new String[20];
int count = 1;
//result.setText(""+html);
try{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(html));
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:
if(parser.getName().equals("p")) initem = true;
break;
case XmlPullParser.END_TAG:
if(parser.getName().equals("p"))
{
initem = false;
}
break;
case XmlPullParser.TEXT:
if(initem){
if(count == 1){
ItemName01 += parser.getText();
}
else{
ItemName02 += parser.getText();
}
}
break;
}
eventType = parser.next();
}
ItemName01 = ItemName01.replace("평균점수:", "");
ItemName01 = ItemName01.replace("(명)", "");
ItemName01 = ItemName01.replace("이 페이지는 자바스크립트가 지원되지 않는 브라우저에서 일부 기능이 제대로 작동하지 않습니다.", "");
result1.setText(""+ ItemName01);
ItemName02 = ItemName02.replace("평균점수:", "");
ItemName02 = ItemName02.replace("(명)", "");
ItemName02 = ItemName02.replace("이 페이지는 자바스크립트가 지원되지 않는 브라우저에서 일부 기능이 제대로 작동하지 않습니다.", "");
result2.setText(""+ ItemName02);
}
catch(Exception e){
Toast.makeText(getApplicationContext(),e.getMessage(), 0).show();
}
}
};
}