본문 바로가기

프로그래밍/App 개발

안드로이드에서 POST방식으로 DATA 전달하기

반응형

안드로이드를 공부하게 되면 웹은 건드리지 않을 것이란 생각은 내 망상이였다. 안드로이드에 웹은 반드시 필요한 존재임에 틀림없다.

안드로이드와 서버의 관계를 살펴보면 안드로이드에서 서버에 정보를 전달하고나 요청하고자 할 떄 거쳐야 하는 부분이 바로 웹이다.

안드로이드는 웹에 정보 전달 또는 요청을 하면 웹은 서버에 정보를 저장하거나 호출하는 중간역할을 하는 셈이다. 그 방식은 Http 통신을

통해 이뤄진다. 


안드로이드에서 POST방식으로 DATA 전달하기


오늘은 카카오 OPEN API를 활용하여 소셜로그인을 구현해보았다. 물론! 신나는 구글 검색을 통해 대단한 분들의 도움을 받아 

연동에 성공 !! 잘되는 코드를 집어넣어도 문제가 나길래 살펴보니, 카카오 Developer에 해쉬키 설정을 이상하게 해둔 탓에 계속 실행이

안되었다... 




이제 카카오 로그인을 통해 얻은 User 정보를 DB에 저장하기만 하면 오늘 개발은 끝이었지만, 문제가 발생했다!!! 내가 알고 있던 서버에 

요청하는 방식(Request Method)은 GET방식으로 URL에 Parameter값을 삽입해서 Http통신으로 요청을 하는 방식이었다. 

String urlAddress = "http://192.1xx.0.xxx:8090/readus/insertBookInfo.do?userName="+userName+"&userId="+userId;


이런 방식이었는데 문제가 카카오톡에서 받은 UserName값이 한글이라 URL로 넘어가질 않는다..

따라서, GET 방식은 한글을 전달하는데 유용하지 않은 것 같다. 방법이 있을수도 있겟지만 나는 모르겠다... ㅠ 

결론은 GET방식이 아닌 POST방식을 통해 값을 넘겨주면 아주 클리어하게 넘어간다.


내가 사용한 방법은




1. 우선 build.gradle에 아래와 같은 값을 넣어서 자동 httpclient를 생성할 수 있도록 만들어 줘야만 한다.


dependencies {

...

 compile group'cz.msebera.android' name'httpclient' version'4.4.1.2'

...

}



2. 그 다음은 방식은 HttpClient를 생성해서 URL에 + 요청 또는 전달하고자 하는 값을 List Array를 넣어 주면 된다.

/*
Post 방식으로 Http 전송하기
*/
private void select_doProcess() {

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://192.168.219.101:8090/readus/insertuserinfo.do");
ArrayList<NameValuePair> nameValues =
new ArrayList<NameValuePair>();

try {
//Post방식으로 넘길 값들을 각각 지정을 해주어야 한다.
nameValues.add(new BasicNameValuePair(
"userId", URLDecoder.decode(userId, "UTF-8")));
nameValues.add(new BasicNameValuePair(
"userName", URLDecoder.decode(userName, "UTF-8")));

//HttpPost에 넘길 값을들 Set해주기
post.setEntity(
new UrlEncodedFormEntity(
nameValues, "UTF-8"));
} catch (UnsupportedEncodingException ex) {
Log.e("Insert Log", ex.toString());
}

try {
//설정한 URL을 실행시키기
HttpResponse response = client.execute(post);
//통신 값을 받은 Log 생성. (200이 나오는지 확인할 것~) 200이 나오면 통신이 잘 되었다는 뜻!
Log.i("Insert Log", "response.getStatusCode:" + response.getStatusLine().getStatusCode());

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

위 메소드를 필요한 곳에서 실행시킨다면 ~! 값이 잘 넘어 가는 것을 확인 할 수 있다. 물론 Controller에서도 Request Method

방식을 POST방식으로 설정하는 것 잊지 말아야 한다.


반응형