마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

공공데이터포털에서 버스 노선정보,위치정보 가져오는 코드입니다. 질문이있습니다.

0 추천
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자에 걸린다고 하네요.
익명사용자 님이 2016년 11월 16일 질문

1개의 답변

0 추천
내부에서 사스파싱을 사용해서 모두 파싱하고 그오브젝트를 리스트로 만들어서 선택하게하시면 될듯합니다
익명사용자 님이 2016년 11월 18일 답변
...