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

안드로이드 xml 풀파싱

0 추천
package com.example.test2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.BufferedInputStream;
import java.net.URL;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    public final static String PHARM_URL = "http://www.kopis.or.kr/openApi/restful/pblprfr?service=d970767d8f5b4158a04ff59117e92c48&stdate=20140101&eddate=20140130&cpage=1&rows=10&prfnm =&prfstatus=02&signgucode=&shcate=";
    public final static String KEY = "d970767d8f5b4158a04ff59117e92c48";

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

    class PharmParser extends  Thread{

        @Override
        public void run() {
            try {
                apiParserSearch();

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            super.run();

        }

        public PharmParser() {

        }

        /**
         * @throws Exception
         */
        public void apiParserSearch() throws Exception {
  

            URL url = new URL("http://www.kopis.or.kr//openApi//restful//pblprfr?service=d970767d8f5b4158a04ff59117e92c48&stdate=20140101&eddate=20140130&cpage=1&rows=10&prfnm =&prfstatus=02&signgucode=&shcate=");

          

 

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();
            BufferedInputStream bis = new BufferedInputStream(url.openStream());
            xpp.setInput(bis, null);

            String tag = null;
            int event_type = xpp.getEventType();

 

            ArrayList<String> list = new ArrayList<String>();

            String addr = null;
            

            while (event_type != XmlPullParser.END_DOCUMENT) {
                if (event_type == XmlPullParser.START_TAG) {
                    tag = xpp.getName();
                   
                } else if (event_type == XmlPullParser.TEXT) {
                   
                    if (tag.equals("fcltynm")) {
                        addr = xpp.getText();

                        
                    }
                } else if (event_type == XmlPullParser.END_TAG) {
                    tag = xpp.getName();
                    if (tag.equals("prfnm")) {
                        list.add(addr);
                        
                    }
                }

                event_type = xpp.next();
            }
            printList(list);
            

        }

        /**
         * 결과 값을 출력해본다.
         *
         * @param list
         */
        private void printList(ArrayList<String> list) {
            for (String entity : list) {
                System.out.println(entity);
               

            }

        }

        private String getURLParam(String search) {
            String url = PHARM_URL;// + "d970767d8f5b4158a04ff59117e92c48=" + KEY;
            if (search != null) {

               

            }
            return url;
        }
    }
}

 

안녕하세요 이제 막 안드로이드를 시작했습니다 ㅜㅜ

계속 찾아봐도 원하는 정보를 얻기에는 어려움이 있어 답답한 마음에 올려봅니다

문법상 틀린 부분을 잘모르겠습니다.. 없는거 같아요...

왜 api를 불러오지 못하는지 모르겠습니다 ㅜㅜ

 

저 url에 있는 xml에서 공연장소명과 공연명 api를 불러오려고 합니다

HttpURLConnection때문인가요?? 어디서 어떤 코딩을 넣어야 하는지에 대한 자세한 설명이면 정말 감사하겠습니다 ㅠㅠ
냐냥이 (120 포인트) 님이 2016년 4월 9일 질문

1개의 답변

0 추천

커넥션에 문제는 없어보이며, 리스트에 추가하는 부분을 수정해보시기 바랍니다.
START_TAG에서 Element를 비교하시고 getText로 내용을 가져와 리스트에 바로 추가하시면 됩니다.

list.add(xpp.getText());

xmlPullParser 보다 SimpleXml을 사용하시면 더욱 편하고 쉽게 xml을 다루실 수 있습니다.
retrofit을 이용해 xml을 파싱하는 예제 링크 해드립니다.

https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter

블럭 (1,700 포인트) 님이 2016년 4월 9일 답변
...