안드로이드/안드로이드 with Java

안드로이드-서버-DB연동 개념: AsynkTask, HttpUrlConnection

닥스훈스 2019. 7. 21. 18:03

안드로이드에서 DB를 사용하려면 바로 접근할 수 없고, 웹서버를 통해 데이터를 주고 받을 수 있다.
나는 웹서버는 톰캣(jsp로), DB는 오라클을 사용하였다. 코드는 구글링을 통해서 구할 수 있었고, 적용하는데 오라클과 서버를 연동하는 부분에서 자꾸 에러가 떠서 오라클을 재설치 하는데 시간이 좀 걸린것 빼고는 어렵지 않게 연동할 수 있었다.

단순히 연동만 한 상태이므로 이제 이 코드를 이해하는데 필요한 지식들을 다음과 같이 정리하였다.

 

1. Manifest.xml에 인터넷 권한 추가

<manifest></manifest>안에 다음 코드를 추가해준다.

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

 

2. 안드로이드 AsynkTask클래스

AsynkTask는 자바에서 쓰레드와 같다. → 자바에서 쓰레드 사용 이유
AsynkTask클래스는 메인 스레드 이외에 작업 처리를 하는 별도의 스레드를 제공한다. 메인스레드에서 생성 후 실행(execute()메서드)되며, 메인 스레드에서 처리시간이 오래 걸리는 작업을 백그라운드 스레드로 넘기고 계속 메인스레드 작업을 진행하기 위해 사용된다. 백그라운드 스레드는 작업 처리 중 메인 스레드에서 처리하는 UI작업에 영향을 주지 않기 때문에 UI가 늦게 뜨는 등의 일이 발생하지 않는다.

 

AsyncTask의 파라메터 타입 <String, Void ,String>

Params: AsyncTask를 시작하기 위해 execute() 메소드가 호출될 때 적절한 인자를 doInBackground메소드에서 파라메터로 전달받는다.
Progress: doInBackground메소드에서 백그라운드 처리 중에 publishProgress 메소드를 호출하여 전달한 인자를 onProgressUpdate메소드에서 파라메터로 받게 된다.
Result: doInBackground메소드에서 리턴한 값을 onPostExecute메소드에서 파라메터로 받게 되는데, 이 때 사용되는 타입니다.

 

AsyncTask의 메소드

AsyncTask를 상속받은 서브 클래스에서는 최소한 doInBackground메소드를 오버라이딩 해주어야 한다.

onPreExecute(): UI스레드상에서 실행되며 doInBackground메소드 전에 호출된다.

doInBackground(Params...): 이 메소드에 포함된 코드는 백그라운드 스레드 상에서 처리되며 이곳에서 UI처리를 하면 안된다. AsyncTask의 execute메소드를 호출시 전달한 인자를 파라메터로 받는다. 리턴한 값은 onPostExecute메소드에서 파라메터로 받는다.

onProgressUpdate(Progresss...): 백그라운드 스레드에서 작업 중에도 메인 스레드에게 UI처리 요청을 쉽게 할 수 있다.
doBackground메소드에서 publishProgress 메소드를 호출함으로써 UI 스레드상에서 실행된다. 백그라운드 스레드에서 작업 처리 중에 프로그레스바 진행 상태 업데이트 같은 UI작업이 필요한 경우 publishProgress메소드를 호출한 후 onProgressUpdate메소드에서 UI작업을 한다. publishProgress메소드에서 인자로 전달한 값을 파라메터로 받는다. 

onPostExecute(Result): 백그라운드 스레드에서 작업 종료 후, 결과를 메인 스레드에게 통보해준다.
UI스레드 상에서 실행되며 doInBackground메소드 종료 후 호출된다.  doInBackground메소드에서 리턴한 값을 onPostExecute메소드에서 파라메터로 받는다. doInBackground에서 작업하는 동안 보여주던 프로그레스바를 감추는 작업같은 UI작업을 할 수 있다.

 

Reference

개념

https://rain483.blog.me/220794072956

https://webnautes.tistory.com/1082

실습

http://blog.naver.com/PostView.nhn?blogId=rain483&logNo=220814116681&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

 

3. HttpUrlConnection

안드로이드와 jsp가 데이터를 주고받을때 사용한다. HttpUrlConnection은 안드로이드에서 지원해주는 API이다.

 

4. 버튼 클릭 이벤트를 처리하는 방법

버튼을 눌렀을 때 발생할 수 있는 클릭 이벤트를 처리하기 위해 리스너(Listener)를 사용한다.  버튼에서 발생할 수 있는 클릭 이벤트는 부모 클래스인 View클래스에 이미 정의되어 있다.
클릭 이벤트 발생시 onClickListener객체를 new로 생성한 다음, setOnclickLister()함수를 호출하여 이벤트를 지정하면 된다.

Reference

https://recipes4dev.tistory.com/54#23-button-%ED%81%B4%EB%A6%AD%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%B2%98%EB%A6%AC