오피넷에서 얻은 유가 API를 적용하려하는데 xmlpullparser를 아무리 사용해도 적용이 안됩니다.

조회수 992회

저는 안드로이드 스튜디오를 전혀 사용해본적이 없었는데, 프로젝트 사정 상 급하게 프로토타입을 만들게 되었습니다. 그래서 모든것을 하나하나 검색하면서 하려니 굉장히 속도도 느리고 어려움이 많습니다.

여차저차 해서 어떻게든 만들고 있는데, 오피넷에서 얻은 유가 API 키를 받아 xml을 통해 적용시키려 하고 있는데 아무리 인터넷을 검색해 나온 방법대로 사용해도 되지가 않습니다.

이미지

이런 식으로 xml파일을 받아서 적용을 해봤습니다. 이 xml파일은 좌표 5000m 반경의 주유소들의 정보를 거리순, 가격순으로 나열해주는 파일입니다. 그래서 2개의 버튼을 만들어 거리순 가격순을 나오면 각각 나오게 하고 싶었습니다. 출력은 스크롤뷰를 만들고 거기에 TextView를 넣어서 하나씩 나오게 하고 싶었습니다.

<?xml version="1.0" encoding="utf-8"?>

<Button
    android:id="@+id/button_distance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    android:text="거리순"
    android:fontFamily="@font/yun320"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.778"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.011" />

<Button
    android:id="@+id/button_price"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:fontFamily="@font/yun320"
    android:text="가격순"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.188"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ScrollView
    android:layout_width="395dp"
    android:layout_height="652dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0">

    <TextView
        android:id="@+id/result"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</ScrollView>

이런식으로 xml파일을 만들고

public class GasStationActivity extends AppCompatActivity {

TextView text;
String data;

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

    text = (TextView) findViewById(R.id.result);
}

public void mOnclick(View v) {
    switch (v.getId()) {
        case R.id.button_distance:
            new Thread(new Runnable() {
                @Override
                public void run() {
                    data = getXmlData();

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            text.setText(data);
                        }
                    });
                }
            }).start();

            break;
    }
}

String getXmlData() {
    StringBuffer buffer = new StringBuffer();


    String queryUrl = "http://www.opinet.co.kr/api/aroundAll.do?code=????????&x=311923&&y=551192&radius=5000&sort=2&prodcd=B027&out=xml";


    try {
        URL url = new URL(queryUrl);
        InputStream is = url.openStream();

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser xpp = factory.newPullParser();
        xpp.setInput(new InputStreamReader(is, "UTF-8"));

        String tag;
        xpp.next();
        int eventType = xpp.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    buffer.append("파싱 시작..\n\n");
                    break;

                case XmlPullParser.START_TAG:
                    tag = xpp.getName();

                    if (xpp.getName().equals("OIL")) ;
                    if (xpp.getName().equals("UNI_ID")) {
                        buffer.append("주유소 ID: ");
                        xpp.next();
                        buffer.append(xpp.getText());
                        buffer.append("\n");
                    }
                    if (xpp.getName().equals("OS_NM")) {
                        buffer.append("주유소 이름: ");
                        xpp.next();
                        buffer.append(xpp.getText());
                        buffer.append("\n");
                    }
                    if (xpp.getName().equals("PRICE")) {
                        buffer.append("휘발유 가격: ");
                        xpp.next();
                        buffer.append(xpp.getText());
                        buffer.append("\n");
                    }
                    if (xpp.getName().equals("DISTANCE")) {
                        buffer.append("거리: ");
                        xpp.next();
                        buffer.append(xpp.getText());
                        buffer.append("m\n");
                    }
                    break;
                case XmlPullParser.TEXT:
                    break;

                case XmlPullParser.END_TAG:
                    tag = xpp.getName();

                    if(tag.equals("OIL")) buffer.append("\n");

                    break;
            }

            eventType = xpp.next();
        }

    } catch (Exception e) {
    }

    buffer.append("파싱 끝");

    return buffer.toString();

}

} 인터넷에 검색하여 나온대로 했는데 도저히 나오지가 않습니다 (key부분은 ????로 가렸습니다.)

이대로 에물레이터를 통해 실행을 하면

이미지

아예 while문은 돌아가지도 않고 파싱끝만 나와버리네요..그리고 분명 TextView를 아래쪽으로 해놨는데 왜 맨 왼쪽 위로 가는걸까요..?

안드로이드 고수 형님들 부디 불쌍한 중생에게 한마디 부탁드립니다 ㅠㅠㅠ manifest에서 인터넷 허용은 했습니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 음.. 잘은 모르지만 RESULT가 있는지 체크해서 있으면 그 밑의 OIL을 하나씩 순회해야 되는 거 아니에요? 소스에 RESULT가 없는데 이걸 명시해 주셔야 되는 거 아닌지 모르겠네요. 엽토군 2019.5.6 14:32
  • 아무튼 뭐랄까 왠지 "야 우리주변 제일싼 주유소 찾아주는 앱 만들어서 대박내자 너 코딩좀 할줄알지" 뭐 이런 상황에 휘말려계신 거 같은데 무운을 빕니다. 엽토군 2019.5.6 14:42

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)