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

Open API에 접근해서 문서화 할 때 오류가 발생합니다.

0 추천
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        btnTest = (Button)findViewById(R.id.btnSeoul);
        btnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StringBuffer sBuffer = new StringBuffer();
                try{
                    String urlAddr = "URL(KEY포함)";//파싱할 URL 입력
                    URL url = new URL(urlAddr);
                    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                    if(conn != null){
                        conn.setConnectTimeout(20000);
                        conn.setUseCaches(false);
                        if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){
                            InputStreamReader isr = new InputStreamReader(conn.getInputStream());
                            BufferedReader br = new BufferedReader(isr);
                            while(true){
                                String line = br.readLine();
                                if(line==null){
                                    break;
                                }
                                sBuffer.append(line);
                            }
                            br.close();
                            conn.disconnect();
                        }
                    }
                    xml = sBuffer.toString();
                }catch (Exception e) {
                    // TODO: handle exception

                }
                parse();
            }
        });

    }



    public void parse(){
        try{
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = factory.newDocumentBuilder();
            InputStream is = new ByteArrayInputStream(xml.getBytes());
            Document doc = documentBuilder.parse(is);
            Element element = doc.getDocumentElement();
            NodeList items = element.getElementsByTagName("mntNm"); //파싱할 노드의 태그네임 입력
            int n = items.getLength();
            StringBuffer sBuffer = new StringBuffer();
            for(int i=0 ; i < n ; i++){
                Node item = items.item(i);
                Node text = item.getFirstChild();
                String itemValue = text.getNodeValue();

                str = Integer.toString((int) Double.parseDouble(itemValue));
                sBuffer.append(str);

            }

        }catch (Exception e) {
            // TODO: handle exception
            Log.e("파싱 중 에러 발생", e.getMessage());
        }
    }

이런 코드를 통해서 Open API를 받아오는 방식인데요<result>

<key>사용자Key</key>
<totalCnt>100</totalCnt>
<pageUnit>10</pageUnit>
<pageIndex>1</pageIndex>
<searchCnm/>
<searchNm/>
<gdTrailInfo>
<mntnCd>2213100200</mntnCd>
<mntNm>
<![CDATA[ 가리산 ]]>
</mntNm>
<subNm>
<![CDATA[ 소양호에서 폭포 따라 정상까지 ]]>
</subNm>
<areaNm>
<![CDATA[ 강원도 춘천시, 홍천군 ]]>
</areaNm>
<mntHeight>1051</mntHeight>

주소를 통해서 브라우저 상에서 위와 같은 내용을 확인했습니다. 그래서 node이름을 mntNm으로 사용을 한 것이구요

그런데 Node Name을 입력하고 (ex: mntNm) 실행을 했을경우 예외가 발생합니다.

1428-1428/com.example.sangeun.xmlparsing E/파싱 중 에러 발생﹕ Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference

제가 Node이름을 잘못 명시해서 이런 오류가 발생하는 건가요 ? 아니면 접근 자체가 잘못된건지 모르겠네요 

arasang (120 포인트) 님이 2015년 5월 20일 질문

1개의 답변

0 추천

gdTrailInfo 안에 mntNm 이오니

gdTrailInfo 태그 부터 찾은후에 그안에서 mntNm 찾아야 맞지 않을까요?

 

 

-----------------------------------

doridori2013@nate.com

익명사용자 님이 2015년 5월 20일 답변
답변 감사합니다 !
그런데 저도 처음에 그 생각을 해서 gdTrailInfo에 먼저 접근을 했는데도 동일한 예외가 발생하더라구요 ... 그래서 혹시나 하는 마음에 했는데도 안되네요 ㅠ
...