티스토리 뷰

Android

[Android] 웹에 요청하기

best 2016. 7. 26. 16:16

웹 요청하기


웹에 요청하기 위해서는 INTERNET 권한이 필요하므로 


권한 획득이 복잡한 마시멜로우에서 롤리팝 버전으로 낮추어 테스트를 해보았습니다.



'Gradle Scripts' 의 'build.gradle' 에서 버전을 먼저 낮춘다.




버전을 낮추면 MainActivity에서 



public class MainActivity extends ActionBarActivity {


로 바꾸어 준다.





버전을 낮추고 인터넷 접속 권한을 얻는다.




인터넷 접속 권한 얻기


Manifest.xml 에서 INTERNET 권한을 얻는 Permission을 작성한다.


<!-- Mobile Networt(MNC, MCC) 를 사용하기 위한 권한 획득 -->
<uses-permission android:name="android.permission.INTERNET" />



웹으로 요청하기



URL 주소를 입력하고 버튼을 누르면 URL로 접속하여 응답을 받아온 뒤 TextView에 응답을 출력하는 코드를 짜보았다.



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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.ktds.jmj.myrequestweb;
 
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
public class MainActivity extends ActionBarActivity {
 
    private Button btnSearch;
    private EditText etURL;
    private TextView tvResult;
 
    private Handler handler;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btnSearch = (Button) findViewById(R.id.btnSearch);
        etURL = (EditText) findViewById(R.id.etURL);
        tvResult = (TextView) findViewById(R.id.tvResult);
 
        handler = new Handler();
 
        btnSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                // HTTP 로 요청을 보낸다. Thread 작업이 필요함
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // 작업시작
                        String url = etURL.getText().toString();
                        try {
                            //요청을 보낼 URL 인스턴스 정보
                            URL httpURL = new URL(url);
                            // 요청을 보내기 위한 준비를 한다.( 요청을 보내기 전)
                            HttpURLConnection conn = (HttpURLConnection) httpURL.openConnection();
 
                            conn.setDoInput(true);
                            conn.setDoOutput(true);
 
                            // 최대 요청 지연 시간, 요청이 5초 이상 걸릴 경우 요청을 끊는다.
                            conn.setConnectTimeout(5000);
 
                            /**
                             * GET 요청을 한다.
                             * POST 요청을 원할 경우 "POST"라고 작성한다.
                             */
                            conn.setRequestMethod("GET");
 
                            // 요청을 보내고, 동시에 응답을 받는다.
                            int responseCode = conn.getResponseCode();
 
                            // 요청과 응답이 제대로 이루어졌는지 검사한다.
                            // HttpURLConnection.HTTP_OK : 응답이 200 OK 라는 의미이다.
                            if( responseCode == HttpURLConnection.HTTP_OK ){
                                // 응답 본문 전체를 닫는다.
                                final StringBuffer responseBody = new StringBuffer();
 
                                // 응답 본문의 한줄 한줄씩 얻어온다.
                                String line  = null;
 
                                /**
                                 * 응답 본문을 담고 있는 InputStream 을 얻어온다.
                                 * BufferedReader 는 InputStream 한줄 씩 얻어올 수 있는 객체다.
                                 */
                                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 
                                while ( (line = reader.readLine()) != null ){
                                    // 응답 본문이 종료될 때 까지 반복한다.
 
                                    // 응답 본문 한줄씩 결과 객체에 담는다.
                                    // 줄바꿈을 위해서 매 라인 끝마다 "\n"을 더해준다.
                                    responseBody.append(line + "\n");
                                }
                                // 연결을 순차적으로 끊는다.
                                reader.close();
                                conn.disconnect();
 
                                /**
                                 * 독립된 Thread 에서 Android Application 에 Main Thread 로 접근할 수 있는 Handler
                                 * UI View 를 컨트롤 한다.
                                 */
                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        // 결과를 사용자에게 보여준다.
                                        tvResult.setText(responseBody.toString());
                                    }
                                });
                            }
                        } catch (MalformedURLException e) {
                            return;
                        } catch (IOException e) {
                            return;
                        }
                    }
                }).start();
 
            }
        });
    }
}
 
cs





결과화면



'Android' 카테고리의 다른 글

[Android] APK 생성  (0) 2016.07.29
[Android] ListView (리스트 뷰)  (0) 2016.07.29
[Android] 항목 선택 MultiChoiceItems, SingleChoiceItems  (1) 2016.07.25
[Android] 권한 획득  (0) 2016.07.25
[Android] AlertDialog 를 이용한 알림창  (0) 2016.07.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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
글 보관함