관리 메뉴

moozi

bus01 본문

TIS_2019/응용sw2019_1기

bus01

moozi 2019. 6. 13. 14:28

package com.cookandroid.bus01;

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Properties;

public class MainActivity extends AppCompatActivity {

TextView textView;

private class DownloadWebpageTask extends AsyncTask<String,Void,String> {

//주요 내용 실행
@Override
protected String doInBackground(String... urls) {
try {
return (String) downloadUrl((String) urls[0]);
} catch (IOException e) {
return "다운로드 실패";
}
}

private String downloadUrl(String myurl) throws IOException {

HttpURLConnection urlConnection = null;
URL url=null;
try {
/* Get방식으로 처리 시작 ==========================*/
url = new URL(myurl);
urlConnection = (HttpURLConnection) url.openConnection();
/* Get방식으로 처리 끝 */

BufferedInputStream buf = new BufferedInputStream(urlConnection.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 {
urlConnection.disconnect();
}
}

@Override
protected void onPostExecute(String result) {
//textView.setText(result);
String headerCd = ""; // 정상적으로 데이터가 수신되면 0.
String busRouteId = ""; // 버스ID.위치정보조회시 필요.
String busRouteNm = ""; // 버스이름.

// 원하는 태그를 찾았을 때 표시하기 위한 Flag.
boolean bSet_headerCd = false;
boolean bSet_busRouteId = false;
boolean bSet_busRouteNm = false;

///// (1) Bus Route ID /////
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();

// xpp는 노드를 하나씩 탐색하기 위한 커서역할.
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(); //텍스트를 읽어옴
bSet_headerCd = false; // 플래그는 다시 못찾았다 표시
}

if (headerCd.equals("0")) { // headerCd값이 0이면 데이터 정상 수신.
if (bSet_busRouteId) { //찾은태그가 맞으면
busRouteId = xpp.getText(); //텍스트를 읽어옴
bSet_busRouteId = false; //플래그는 다시 못찾았다 표시
}
if (bSet_busRouteNm) { //찾은태그가 맞으면
busRouteNm = xpp.getText(); //텍스트를 읽어옴
bSet_busRouteNm = false; //플래그는 다시 못찾았다 표시
}
}
} else if(eventType == XmlPullParser.END_TAG) { //끝나는 태그이면.
;
}
eventType = xpp.next();//다음노드(태그,텍스트 포함)로 이동
}
} catch (Exception e) {
}

//textView.setText("headerCd:"+headerCd+"\n"+"busRouteId"+busRouteId+"\n" +
// "busRouteNm"+busRouteNm+"\n");
String url="http://ws.bus.go.kr/api/rest/buspos/getBusPosByRtid?serviceKey=OckdUErbAGthsbx6VYITeQ9xzEpUow%2F25CZWigZoPo3JVEW%2FU%2Bpd%2B2ZiN06BuDRn3Zjfh21AHXvgg8cWnuP9Hw%3D%3D&busRouteId="+busRouteId;
new DownloadWebpageTask2().execute(url);

}
}

private class DownloadWebpageTask2 extends DownloadWebpageTask {

protected void onPostExecute(String result) {

String headerCd = "";
String plainNo = "";
String gpsX = "";
String gpsY = "";

boolean bSet_headerCd = false;
boolean bSet_gpsX = false;
boolean bSet_gpsY = false;
boolean bSet_plainNo = false;

///// (2) Bus Positions
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();

xpp.setInput(new StringReader(result));
int eventType = xpp.getEventType();

int count = 0;
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("gpsX"))
bSet_gpsX = true;
if (tag_name.equals("gpsY"))
bSet_gpsY = true;
if (tag_name.equals("plainNo"))
bSet_plainNo = true;
} else if (eventType == XmlPullParser.TEXT) {
if (bSet_headerCd) {
headerCd = xpp.getText();
bSet_headerCd = false;
}

if (headerCd.equals("0")) {
if (bSet_gpsX) {
count++;

gpsX = xpp.getText();
bSet_gpsX = false;
}
if (bSet_gpsY) {
gpsY = xpp.getText();
bSet_gpsY = false;
}
if (bSet_plainNo) {
plainNo = xpp.getText();
bSet_plainNo = false;
}

Log.d("==data==",plainNo+","+gpsX+","+gpsY);


}
} else if (eventType == XmlPullParser.END_TAG) {
;
}
eventType = xpp.next();
}
} catch (Exception e) {
}


}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView=(TextView)findViewById(R.id.data);

String url="http://ws.bus.go.kr/api/rest/busRouteInfo/getBusRouteList?serviceKey=OckdUErbAGthsbx6VYITeQ9xzEpUow%2F25CZWigZoPo3JVEW%2FU%2Bpd%2B2ZiN06BuDRn3Zjfh21AHXvgg8cWnuP9Hw%3D%3D&strSrch=402";
new DownloadWebpageTask().execute(url);

}
}

'TIS_2019 > 응용sw2019_1기' 카테고리의 다른 글

Bus03  (0) 2019.06.14
안드로이드연습문제09  (0) 2019.06.13
jsp01 MainActiviy.java  (0) 2019.06.12
안드로이드연습문제8  (0) 2019.06.11
안드로이드 member  (0) 2019.06.11
Comments