사용한 툴 : 안드로이드 스튜디오
사용 버전 : 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 [코딩배우는 잉여한 잉여블로그]