I.K.Picture & IT Info.

안드로이드 통신 HttpAsyncTask 본문

Development/Java/Android

안드로이드 통신 HttpAsyncTask

helpful-intruder 2015. 5. 20. 16:06
반응형

대부분 어플리케이션 제작시에 서버와 통신을 하기 위해서 HTTP 통신 프로토콜을 많이 사용되죠~?


안드로이드 어플리케이션 개발 시에도 과거(완전 옛날)에는 메인 스레드에서 바로 HTTP 통신이 가능했는데


언제부턴가 메인 스레드에서는 못하도록 막아놨죠..


그리고 제가 생각했을 때도 메인 스레드에서 통신을 한다는게 참.. 별로 좋지 않는 거 같구요~


그래서!! 별도 스레드를 생성하는 AsyncTask 라는 기존 클래스를 활용하는 방법을 포스팅하려 합니다 ^^


자 그럼 현재는 복잡하지 않게 간단한 방법으로 말씀을 드려볼께요


일단 자신이 원하는 프로젝트 패키지 않에 다음과 같은 클래스를 생성합니다.

(전 기본적으로 http 통신을 위한 asynctask 객체를 작성할 것이므로 클래스 이름을 HttpAsyncTask 라고 칭했습니다)


public class HttpAsyncTask extends AsyncTask<String, Integer, String>{
        private Context context;
        public HttpAsyncTask(Context context){
                this.context =context;
        }
        ...
}

이렇게만 생성할 경우 unImplements 된 함수가 있다고 오류가 뜨게 됩니다.


이클립스를 사용하신다면 아마 간단하게 클릭으로 해결이될것이고 이 부분에서 생성되는 함수는 doInBackground 밖에 없지만... 그 외 추가할 수 있는 함수들은 다음과 같습니다.


       @Override
        protected void onPreExecute() {
                 ...
        }
        @Override
        protected void onProgressUpdate(Integer... progress){
                ...
        }
        @Override
        protected String doInBackground(String... params) {
                return null;
        }
        @Override
        protected void onPostExecute(String str){
                ...
        }



자 그럼 여기서 < > 안의 내용과 함수들을 정리해볼까요?

  <String, Integer, String>

첫번째 값(String) : doInBackground 실행시 파라미터, (실제 Task가 구동시 인자값을 넘겨주는 것입니다)

두번째 값(Integer) : onProgressUpdate 실행시 파라미터, (doInBackground 가 돌면서 어떠한 이벤트시 onProgressUpdate를 호출할 수 있는데 그 때 넘겨주는 인자값)

세번째 값(String) : doInBackground 가 모두 완료되었을 때의 리턴 값 



이 세개의 값들은 자신이 원하는 것으로 얼마든지 변경 가능합니다 ^^


자 그럼 아래 함수들은 무엇일까요?

 onPreExecute

 스레드가 실행되기 직전 세팅  (젤 먼저 호출)

 onProgressUpdate

 스레드가 실행 중간 중간 호출 

 doInBackground

 실제 스레드가 실행되는 함수 

 onPostExecute

 스레드가 모두 실행 된 후 호출되는 함수 


뭐 일단 간단하게 정리를 해 보았구요 저 같은 경우는 여기에다가 직접 구현을 하는 것이 아니라 이 클래스를 여러번 사용할 수 있도록


별도 모듈화 시켜노쿠 재활용 하고 있습니다.


왜냐구요? 워낙 길다보니... 기억하기가 쉽지 않더군요 ㅎㅎ;;


그래서 제가 만들어놓은 모듈은 별도로 github에다가 올려놓았습니다. 


필요하신분들은 받아가시면될 것 같아요 ^^


그럼 이렇게 만들어놓은 모듈을 어떻게 사용하느냐!?


사용할 엑티비티에서 제가 만든 모듈 객체를 생성하면 되겠죠 ㅎㅎ?


public class MainActivity extends ActionBarActivity {
	...
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		HttpAsyncTask test = new HttpAsyncTask(MainActivity.this){
			@Override
			protected String doInBackground(String... params) {
				super.doInBackground(params);
				String str = "";
				//안에다가 http 통신 프로토콜 작성
				return str;
			}
			@Override
			protected void onPostExecute(String str) {
				super.onPostExecute(str);
				
			}
		};
		test.execute("");
	}
        ...
}


자 이런식으로 사용하시면 됩니다!


정확히 이해가 안되시는 분들은 아래 주소로 가셔서 소스코드를 다운받아서 한번 해보세요 ^^


주소 : https://github.com/engintruder/HttpAsyncTaskModule

반응형
Comments