마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드와 외부 데이터베이스 연동에대하여 ㅠㅠ

0 추천
아무래도 안드로이드와 MySQL이 다이렉트로 연동이 안되기때문에 중간다리로 PHP등을 이용하여 접근을한다고 알고있습니다.

그런데 제가 A라는 액티비티에서 DB에 있는 특정한 자료값들을 가져오고 싶은데, 그 값을 가져오기위하여 AsyncTask를 상속받은 또 다른 B라는 클래스를 이용하는데, A 액티비티에서 AsyncTask를 excute하였을때 B클래스에서 생성되는 ArrayList를 가져와서 쓰고싶습니다. 그런데 제 논리대로 코드를 작성하였더니 A액티비티가 종료된 후에 B클래스의 AsyncTask가 돌더군요

이점 어떻게 해결해야 할까요? ㅠ.ㅠ
와이번스 (170 포인트) 님이 2015년 10월 13일 질문
혹시 AsyncTask를 좀 더 세밀하게 사용하기 원하시면.. https://github.com/mcsong/AdvancedAsyncTask 이 라이브러리도 참고해 보세요..

1개의 답변

0 추천
 
채택된 답변
AsyncTask의 doInbackground 부분이 별도의 스레드로 동작을 하기 때문에 라이프 사이클과 동일하게 종료되지가 않는 것은 정상입니다. 그래서, 간단한 해결책을 살펴보면..

A클래스에서 B클래스의 인스턴스를 유지하고 있다가, onDestory와 같은 라이프 사이클에서 B클래스 인스턴스의 cancel(true)를 호출해서 종료시켜 주시면 됩니다.
mcsong (44,040 포인트) 님이 2015년 10월 13일 답변
와이번스님이 2015년 10월 13일 채택됨
지금 A클래스 내에서 B클래스( AsyncTask)를 execute하였을때 다음줄의 코드가 동작이 되어서 문제입니다.
제가 이해를 못한것일수도 있는데, A클래스에서 B클래스내의 doInBackground() 수행 후 onPostExecute()가 종료된후에 A클래스의 다음줄의 코드가 동작되는 방식으로 하고싶은데 혹시 방안이있나요?
A 클래스의 다음줄의 코드는 메서드로 분리를 하시고요. AsyncTask의 onPostExecute() 메서드에서 분리한 메서드를 호출하시면 됩니다. AsyncTask는 A 클래스의 inner 클래스로 작성하시면 간단하게 구현하실 수 있습니다.
감사합니다 ㅠㅠㅠ 해결됬네요 간단한거였는데 감사합니다!
또 궁금증이 생겨 질문드립니다.. 만약 특정한 배열 A[10]이 있을때
URL = "http://xxx.xxx.xxx.xxx:8080/~~~?Email = A[i++] 이런식으로 A의값이 매번 바뀌는 동시에 forloop를 돌면서 생기는 URL의 결과로 가져온 리스트들을 그때 그때 사용하고 싶을때는 어떻게 해야하나요? 답변해주신것처럼 따로 메서드로 분리한다하여도 바로 다음줄의 forloop로 넘어가게되는데.. 답변 부탁드립니다 ㅠ
이런 경우에는 루프를 돌면서 AsyncTask를 사용해서 데이터를 가지고 옵니다. 그리고 그 결과는 AsynctTask에서 Activity의 메서드를 호출(결과값을 전달)해서 Activity에서는 이 결과값을 Map의 형태로 유지하면 해결할 수 있을 것으로 보입니다.
...