2014년 3월 23일 일요일

[안드로이드 앱 개발] 안드로이드에서 웹서버 연동하는 방법[전송편]

안드로이드에서 웹서버 연동하는 방법에 대해 정리해보자.

1. 메니페스토 파일에 인터넷 사용권한을 추가한다.


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

2. 안드로이드에서 내부적으로 네트워크 사용에 대해 엄격히 제한하고
   있기 때문에를 사용하기 위해서는 강제로 네트워크를 사용하겠다는
   정책을 추가해주어야한다.
   StrictMode.ThreadPolicy policy 
    = new StrictMode.ThreadPolicy.Builder().permitAll().build();
   StrictMode.setThreadPolicy(policy);

3. 웹서버로 데이타를 전송하기 위해서는 비동기전송방식을 사용하는 것이 좋다. 왜냐하면 웹데이타를 가져올 때 문제가 발생하게 되면 앱 전체가 먹통될 수 있다. 따라서 이를 피하기위해서는 안전한 비동기방식을 사용하는 것이 좋다. 비동기 방식을 사용하기 위해서는 AsyncTask를 이용하여 데이타를 전송하여야한다.
class HttpPostAsyncTask extends AsyncTask<String, Integer, Long>
 {
 @Override
 protected Long doInBackground(String... params) {
  String username = params[0];
  String idvalue = params[1];
  String contact = params[2];
  String address = params[3];
  
  try {
   HttpClient client = new DefaultHttpClient();
   String postUrl = "http://test.mireene.com/receiveData.php";
   HttpPost post = new HttpPost(postUrl);
   
   //전송될 데이터 값
   List params2 = new ArrayList();
   params2.add(new BasicNameValuePair("username", username ));
   params2.add(new BasicNameValuePair("idvalue", idvalue ));
   params2.add(new BasicNameValuePair("contact", contact ));
   params2.add(new BasicNameValuePair("address", address ));

   UrlEncodedFormEntity ent = 
    new UrlEncodedFormEntity(params2,HTTP.UTF_8);
   post.setEntity(ent);
   HttpResponse responsePost = client.execute(post);
   HttpEntity resEntity = responsePost.getEntity();
   
   if (resEntity != null) {
    Log.w("Response", EntityUtils.toString(resEntity));
   }

  } catch (MalformedURLException e) {
   //
  } catch (IOException e) {
   //
  }
  return null;
 }
}

4. 마지막으로 전송하고자 하는 곳에서 인스턴스를 만들어 다음 로직을 사용하면 된다.
 String strCurDate=getCurrentDate();
 HttpPostAsyncTask task=new HttpPostAsyncTask();
 task.doInBackground(value1,value2,value3,value4);

댓글 3개:

  1. 감사합니다. 제가 이번에 앱을 만들게 됬는데 post때문에 3일동안 시간을 날렸는데

    이글을 보고 바로 해결했네요. 감사합니다 ^^

    답글삭제
  2. 글쓴이님 ! 제가 안드로이드 post부분때문에 2주쨰 고생하고있는데 소스전체파일좀 받을수있을까요 ??

    답글삭제
  3. hss57125471@gmail.com 입니다 많은포스팅보고따라햇는데 저는 실행이되질않네여..

    답글삭제