안드로이드에서 어느샌가 메인스레드에서의 네트워크 작업이 불가능해졌습니다.
물론 필요하다고 생각한 내용이었지만, 애초에 불가능하게 만들 줄은 몰랐습니다.
아무튼, HTTP post 메서드를 스레드로 작업하여, 그 결과값을 받아오는 함수입니다.
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
|
/** * HTTP POST 전송 * @param url 목적 URL * @param params 함께 보낼 파라미터 * * @return Response String */ private String httpRequestPost(final String url, final ArrayList params) { //타임아웃 설정 final int timeoutSeconds = 15; //Callable 선언 final Callable postCallable = new Callable() { @Override public String call() throws Exception { final HttpClient client = new DefaultHttpClient(); final UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8); final HttpResponse responsePost = client.execute(new HttpPost(url).post.setEntity(ent)); final HttpEntity resEntity = responsePost.getEntity(); return EntityUtils.toString(resEntity); } }; try { //callable 시작 final Future postFuture = es.submit(postCallable); //결과값 반환 return postFuture.get(timeoutSeconds, TimeUnit.SECONDS); } catch (Exception e) {} return null; } |
http://pastebin.com/RwxMDTYW
기본적으로 Callable을 사용하여 Future에서 작업한 결과를 받아서 return합니다.
도중 Exception이 발생하면 무조건 null을 반환합니다.