package com.dongyang.conputer.myapplication;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
TextView tv;
EditText etNm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
etNm = (EditText) findViewById(R.id.etNm);
}
public void btNext(View v) {
String serviceURL = "http://ws.bus.go.kr/api/rest/busRouteInfo/getBusRouteList";
String serviceKey = "";
String strSrch = etNm.getText().toString();
String strUtl = serviceURL + "?ServiceKey=" + serviceKey + "&strSrch=" + strSrch;
DownloadWebpageTask1 task1 = new DownloadWebpageTask1();
task1.execute(strUtl);
}
private class DownloadWebpageTask1 extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
try {
return (String) downloadUrl((String) urls[0]);
} catch (IOException e) {
return "다운로드 실패";
}
}
protected void onPostExecute(String result) {
String headerCd = "";
String busRouteId = "";
String busRouteNm = "";
boolean bSet_headerCd = false;
boolean bSet_busRouteId = false;
boolean bSet_busRouteNm = false;
tv.append("=====노선ID=====\n");
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(result));
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
;
} else if (eventType == XmlPullParser.START_TAG) {
String tag_name = xpp.getName();
if (tag_name.equals("headerCd")) bSet_headerCd = true;
if (tag_name.equals("busRouteId")) bSet_busRouteId = true;
if (tag_name.equals("busRouteNm")) bSet_busRouteNm = true;
} else if (eventType == XmlPullParser.TEXT) {
if (bSet_headerCd) {
headerCd = xpp.getText();
tv.append("headerCd: " + headerCd + "\n");
bSet_headerCd = false;
}
if (headerCd.equals("0")) {
if (bSet_busRouteId) {
busRouteId = xpp.getText();
tv.append("busRouteId: " + busRouteId + "\n");
bSet_busRouteId = false;
}
if (bSet_busRouteNm) {
busRouteNm = xpp.getText();
tv.append("busRouteNm: " + busRouteNm + "\n");
bSet_busRouteNm = false;
}
}
} else if (eventType == XmlPullParser.END_TAG) {
;
}
eventType = xpp.next();
}
} catch (Exception e) {
tv.setText(e.getMessage());
}
String serviceUrl = "http://ws.bus.go.kr/api/rest/buspos/getBusPosByRtid";
String serviceKey = "";
String strUrl = serviceUrl + "?ServiceKey=" + serviceKey + "&busRouteId=" + busRouteId;
DownloadWebpageTask2 task2 = new DownloadWebpageTask2();
task2.execute(strUrl);
}
}
private String downloadUrl(String myurl) throws IOException {
HttpURLConnection conn = null;
try {
URL url = new URL(myurl);
conn = (HttpURLConnection) url.openConnection();
BufferedInputStream buf = new BufferedInputStream(conn.getInputStream());
BufferedReader bufreader = new BufferedReader(new InputStreamReader(buf, "utf-8"));
String line = null;
String page = "";
while ((line = bufreader.readLine()) != null) {
page += line;
}
return page;
} finally {
conn.disconnect();
}
}
이런식으로 구현했는데, 해결하고 싶은 문제가 뭐냐하면, EditText로 버스번호를 입력받아
그 번호에 맞는 버스노선정보를 추출하고싶은데, 만약 77번을 검색하면
778번 777번, 877번 등등 77이 포함된 모든 버스노선정보가 나오게됩니다.
이부분을 어떻게 해결할 수 있을까요?
//위치정보 코드는 잘랏습니다. 8000자에 걸린다고 하네요.