안드로이드 HttpURLConnection

안녕하세요 Rabbit입니다.

오늘은, 안드로이드의 URLConnection 대해서 몇가지 포스팅을 하려고 하고 있습니다.

안드로이드 6.0 이전에는 apache http client를 많이 썼었는데  안드로이드 6.0 이후에는
java.net.HttpURLConnection를 사용하는 것을 권장하고 있습니다.


※여전히 사용할 수는 있습니다. 위와 같은 식으로, gradle.build에서 추가하셔서 사용하시면 됩니다.

그래서 java.net.HttpURLConnection 에서의 get,post 방식과 사용법에 대해서 간단하게 포스팅 하겠습니다.



일단은 백문이 불여일견이라고...... 코드를 가지고 설명하는게 빠를 것같아서 코드안에서 설명하겠습니다.



setRequestMethod("Post") 여기를 보시면, "post"대신에 "get"으로 바꾸면 get 방식으로 바뀌게 되는데, post와 Get은 다음 포스팅에 따로 한번 올리겠습니다.

setdoinput() 서버에서 받아오는 것을 말하는데 기본값은 true입니다.

setdoOutput() 서버로 보내는 것을 말하는데 기본값은 false입니다.
이 부분은 상당히 중요합니다. 기본값은 false인데 이부분을 true로 바꾸게 되면 내부적으로는 setRequestMethod("")를 get으로 설정을 하여도, post로 내부적으로 움직이게 됩니다.


위 사진은 Android Developer 페이지에서 캡춰 해왔습니다.

여담이지만, httpURLConnection과 URLConnection에 대한 차이에 대해서 궁금해 하실 수도 있을 거 같아서... stackoverflow에서 캡춰를 하나 해왔습니다만.. (사실저도 잘모름... 슬프네요 누가 부연 설명좀 해주세요).



httpURLConnection은 https 만을 처리할때 사용된다고 하는 것 같습니다. 이부분은 나중에 .. 알게되면 추가적으로 포스팅하겠습니다.

일단 다음포스팅은  서버와의 연결하는 내용을 포스팅하겠습니다. php와 mysql을 이용해서 하겠습니다 ^_^.

밑에 코드 추가하겠습니다.

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
public class URLConnection_http extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_urlconnection);
        textView=(TextView) findViewById(R.id.myid);
        Async_Prepare();
    }
    public void Async_Prepare(){
        Async_test async_test =new Async_test();
        async_test.execute("hello","rabbit");//요렇게 스트링값들을 넘겨줍시다. 저번시간에 포스팅을 보시면 Data Type을 어떻게 할지 결정 할 수 있습니다. 힘내봅시다.
    }
    class Async_test extends AsyncTask<String,Void,String>{
        ProgressDialog dialog;
        int cnt=0;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog=ProgressDialog.show(URLConnection.this,"이것은 URLConnection Test입니다...",null,true,true);
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            dialog.dismiss();//Dialog를 dissmiss합니다.
            textView.setText("I got Msg from Server! : "+s);// TextView에 보여줍니다. 
//            Toast.makeText(getApplicationContext(),"i got a msg from server :"+s,Toast.LENGTH_LONG).show();
        }
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            Log.d("onProgress update",""+cnt++);
        }
        @Override
        protected String doInBackground(String... params) {
            HttpURLConnection httpURLConnection = null;
            try{
                String tmsg = params[0];
                String tmsg2 = params[1];
                String data = URLEncoder.encode("tmsg","UTF-8")+"="+URLEncoder.encode(tmsg,"UTF-8");// UTF-8로  설정 실제로 string 상으로 봤을땐, tmsg="String" 요런식으로 설정 된다.
                data+= "&"+URLEncoder.encode("tmsg2","UTF-8")+"="+URLEncoder.encode(tmsg2,"UTF-8");
//                String data2 = "tmsg="+testMsg+"&tmsg2="+testMsg2;
                String link = "http://xxx.xxx.xxx.xxx/"+"test.php";// 요청하는 url 설정 ex)192.168.0.1/httpOnlineTest.php
                URL url = new URL(link);
                httpURLConnection = (HttpURLConnection) url.openConnection();//httpURLConnection은 url.openconnection을 통해서 만 생성 가능 직접생성은 불가능하다. 
                httpURLConnection.setRequestMethod("POST");//post방식으로 설정
                  httpURLConnection.setDoInput(true);// server와의 통신에서 입력 가능한 상태로 만든다.
                httpURLConnection.setDoOutput(true);//server와의 통신에서 출력 가능한 상태로 ㅏㄴ든다. 
//                httpURLConnection.setConnectTimeout(30);// 타임 아웃 설정 default는 무제한 unlimit이다.
                OutputStreamWriter wr = new OutputStreamWriter(httpURLConnection.getOutputStream());//서버로 뿅 쏴줄라구용
                wr.write(data);//아까 String값을 쓱삭쓱삭 넣어서 보내주고!
                 wr.flush();//flush!
                BufferedReader reader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8"));//자 이제 받아옵시다.
                StringBuilder sb = new StringBuilder();// String 값을 이제 스슥스슥 넣을 껍니다. 
                String line;
                while ((line= reader.readLine())!=null){
                    sb.append(line);//
                }
                httpURLConnection.disconnect();//이거 꼭해주세요. 보통은 별일 없는데, 특정상황에서 문제가 생기는 경우가 있다고 합니다.
                return sb.toString();//자 이렇게 리턴이되면 이제 post로 가겠습니다.
            }catch (Exception e){
                 httpURLConnection.disconnect();
                return  new String ("Exception Occure"+e.getMessage());
            }//try catch end
        }//doInbackground end
    }//asynctask  end
}
cs


댓글

이 블로그의 인기 게시물

httpURLConnection을 이용한 안드로이드,php,mysql 서버 연동