본문 바로가기
Front-end/Android (안드로이드 앱 개발)

Android Studio , XML 데이터 가져오기, JSON 데이터 가져오기

by javapp 자바앱 2020. 8. 18.
728x90

DOM 방식으로 XML 파일을 분석할 것이다.

 

< xxx .xml >

<data>

<item>

<data1>문자열1</data1>

<data2>100</data2>

</item>

<item>

<data1>문자열2</data1>

<data2>200</data2>

</item>

</data>

 


 

1. 메니페스트 등록

<uses-permission android:name="android.permission.INTERNET"/>

 

9.0 이후는 application에서

android:usesCleartextTraffic="true" 추가

 

2. 쓰레드를 이용

public void btnXML(View view) //http 한줄식 받아오는 것
{
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            try{
                String site = "http://(IP):8080/db/data.xml";
                URL url = new URL(site);
                URLConnection conn = url.openConnection();
                InputStream is2 = conn.getInputStream();
                //DOM 방식으로 XML 문서를 분석할 수 있는 parser객체 생성
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document doc = builder.parse(is2);

                //최상위 Root 태그 객체 얻어온다.
                Element root = doc.getDocumentElement(); //xml 전체 얻기
                //item 태그들이 담겨 있는 리스트를 얻어온다.
                NodeList itemList = root.getElementsByTagName("item");

                textview3.setText("");
                //item 태그 객체의 수만큼 반복
                for(int i =0; i < itemList.getLength(); i++)
                {
                    Element itemTag = (Element)itemList.item(i);
                    //item 태그 안의 태그들을 얻어온다.
                    NodeList data1List = itemTag.getElementsByTagName("data1");
                    NodeList data2List = itemTag.getElementsByTagName("data2");
                    //0번째 태그 객체를 얻어온다.
                    Element data1Tag = (Element)data1List.item(0);
                    Element data2Tag = (Element)data2List.item(0);
                    //문자열 데이터를 추출
                    final String data1 = data1Tag.getTextContent();
                    String data2 = data2Tag.getTextContent();

                    final int intData2 = Integer.parseInt(data2);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textview3.append("data1:"+ data1+"\n");
                            textview3.append("data2:"+intData2+"\n");
                        }
                    });
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    };
    Thread thread = new Thread(runnable);
    thread.start();
}

 

 


 

[] 는 배열이고

{} 는 object

 

 <샘플 .jsp>

<%@ page language="java" contentType="text/json; charset=UTF-8" 
    pageEncoding="UTF-8"%> 

[ 
  { 
  "data1" : "문자열", 
  "data2" : 100 
  }, 
  { 
  "data1" : "문자열2", 
  "data2" : 200 
  } 
]

 

 

 

<main.java>

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        try{
            String site = "http://(ip):8080/db/dataJson.jsp";
            URL url = new URL(site);
            //접속
            URLConnection conn = url.openConnection();
            //서버와 연결되어 있는 스트림을 추출
            InputStream is = conn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is,"UTF-8");
            BufferedReader br = new BufferedReader(isr);

            String str = null;
            StringBuffer buf = new StringBuffer();

            do{
                str = br.readLine();
                if(str != null){
                    buf.append(str);
                }
            }while(str != null);

            String data = buf.toString();  //json 문자열 다 읽어옴
            System.out.println(data);
            textview3.setText("");

            //JSON 배열 객체를 생성
            JSONArray root = new JSONArray(data);
            //배열의 객체 개수만큼 반복한다.
            for(int i =0; i< root.length(); i++){
                // i 번째 JSON 객체를 추출한다.
                JSONObject obj = root.getJSONObject(i);
                //추출한 JSON 객체로부터 데이터를 추출한다.
                final String data1 = obj.getString("data1");
                final int data2 = obj.getInt("data2");

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textview3.append("jsondata1:"+data1+"\n");
                        textview3.append("jsondata2:"+data2+"\n\n");
                    }
                });
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
};
Thread thread = new Thread(runnable);
thread.start();

 

댓글