URL을 통해 안드로이드로 xml 파일 다운로드

 안드로이드 프로그램에서 필요한 자료를 받기 위해서는 URL을 통해 해당 주소에 있는 원하는 자료를 다운로드 받아 사용할 수 있습니다.

 특히 RSS와 같이 지속적으로 갱신되는 파일의 경우 실시간으로 새로운 정보를 수신해야 하기 때문에 이를 활용해 xml 파서를 이용하기도 하지요.


 만약 용량이 큰 파일을 다운로드할 경우 프로그램이 다운로드를 완전히 마치지 않고 바로 다음 단계로 넘어가는 경우가 있습니다. 다운로드를 완전히 끝내기 위해서 자바의 Thread를 사용하였습니다. Thread의 join() 함수는 Thread가 종료될 때 까지 함수가 선언한 단계에서 다음 단계로 넘어가지 않고 기다립니다.


 아래는 rss를 다운로드 하여 String으로 객체화 시킨 예제입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
 
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
 
public class MainActivity extends ActionBarActivity {
    TextView textview1;
    String xml;
    URL url;
    HttpURLConnection conn;
    InputStreamReader isr;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        textview1 = (TextView) findViewById(R.id.textview1);
 
        try {
            rcvXml RX = new rcvXml();
            RX.start();
            RX.join();
            textview1.setText(xml);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    class rcvXml extends Thread {
        public void run() {
            try {
                url = new URL("http://www.kma.go.kr/wid/queryDFS.jsp?gridx=60&gridy=126");
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        url.openStream(), "UTF-8"));
                xml = in.readLine();
                while(true){
                    String temp;
                    temp = in.readLine();
                    if(temp==null)
                        break;
                    xml += temp;
                }
            } catch (Exception e) {
 
            }
        }
    }
}
 
 
 


300x250