사용한 툴 : 안드로이드 스튜디오

사용 버전 : API 22

*주의 : 2015.11.19 기준 API23 버전에서는 org.apache.http.client.HttpClient를 지원하지 않으니 주의해야 한다.*

안드로이드 스튜디오는 간혈적으로 org.apache.http.client.HttpClient 라이브러리를 import하지 못한다.

따라서 개발자가 Gradle Scripts -  build.grade (Module : app) 에 있는 컴파일러에 직접 명시 해주어야 한다.

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.0'
compile 'org.apache.httpcomponents:httpclient:4.5' <- 추가
}

▲build.grade 맨하단의 dependencies


서버로 요청하는 행동은 인터넷을 사용하기 때문에 android.permmision.INTERNET 퍼미션을 AndroidManifest.xml추가해야한다.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

안드로이드에서 서버로 POST 보내는 순서

1. HttpClient 오브젝트 생성 

2. HttpPost 오브젝트 생성

3. POST 파라미터 추가

4. POST 데이터 엔코더

5. 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
private void sendJsonDataToServer(){
    
    String URL = "http://toybox.iptime.org:18080/test";
    //1
    HttpClient httpClient = new DefaultHttpClient();
    //2
    HttpPost httpPost = new HttpPost(URL);
    //3
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("ID",m_strId));
    nameValuePairs.add(new BasicNameValuePair("BeaconMAC",m_strbeaconMac));
    try {
        //4
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        //5
        HttpResponse response = httpClient.execute(httpPost);
        // write response to log
        Log.d("Http Post Response:", response.toString());
    } catch (UnsupportedEncodingException e)    {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // Log exception
        e.printStackTrace();
    } catch (IOException e) {
        // Log exception
        e.printStackTrace();
    }
}
 
cs

 

혹시 코드를 메인스레드에서 돌렸을 때 예외가 발생한다면 서브 스레드를 통해 값을 전송하면 된다.

(메인스레드가 무거워지는 것을 방지하려고 예외를 발생시킴)



출처: http://ghdrl95.tistory.com/79 [코딩배우는 잉여한 잉여블로그]