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

AsyncTask 관련 질문 ㅠ

0 추천
안드로이드를 공부 중인 초보입니다..
 
간단한 어플을 만들다가 진행이 안되서 질문드려요.
 
일단 소스부터..
 
.
.
.
@Override
protected void onPostExecute(String result) {
  try {
    JSONObject obj = new JSONObject(result);
    JSONObject test = obj.getJSONObject("Course");
    JSONArray rows = test .getJSONArray("row");
 
    for (int i = 0; i < rows.length(); i++) {
            JSONObject receiveData = rows.getJSONObject(i);
>>       new CoordAsyncTask().execute(receiveData.getString("X"), receiveData.getString("Y"));
            setItem(receiveData);
    }
  }catch{...}
}
.
.
.
목적은 현 위치와 목적지와의 거리를 표시하는 거구요~
 
먼저 json 파싱을 해서 목적지의 좌표값을 받아오게 됩니다~
 
문제는 for문 안쪽에 표시해둔 
 
new CoordAsyncTask().execute(receiveData.getString("X"), receiveData.getString("Y")); 
 
이 부분입니다...
 
파싱해 온 정보에는 좌표값이 있는데,
 
제가 사용하기 위해선 저 좌표값을 WGS84로 변환을 해야하더라구요..
 
그래서 또 한 번 AsyncTask를 이용해서 다음API로 좌표값을 변환하는 것까진 됐는데,
 
CoordAyncTask의 onPostExecute()를 보면..
.
.
.
@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    gilLocation.setLongitude(k_map_x);
    gilLocation.setLatitude(k_map_y);
    distanceTo = myLocation.distanceTo(gilLocation)/1000.0f;
}
.
.
.
이렇게 하면 k_map_x와 k_map_y에 변환된 좌표값이 있고,
 
distanceTo라는 변수에 현 위치와 목적지의 거리는 저장했는데..
 
이 값을 리턴 받을 수 있는 방법이 있을까요..?

.

.

.

추가질문..ㅠ

이런식으로 asynctask를 두 번 사용해도 괜찮은건가요...?ㅠㅠ

mcflurry (370 포인트) 님이 2014년 7월 11일 질문

1개의 답변

0 추천
 
채택된 답변
서버에서 같을 받아 오는 거면, doInBackground() 에서 한번에 하는 게 좋지 않을까요?

좌표값을 받아오고, 값이 제대로 들어 왔으면, 변환 요청하고, 에러면 에러 처리 하는 방식으로요..

구현 하기에 따라 다르겠지만, 위 말씀은 그냥 제 생각입니다. ^^;

 

그리고 리턴값은 Interface 하나 생성해서 Listener 하나 등록해놓고, onPostExecute()에서 콜백 형식으로 하면 될 것 같은데요.

private ResultListener mListener;

 public interface ResultListener {

    public void onResultData(String result);

}

public void setOnResultListener(ResultListener listener)  {

    mListener = listener;

}

onPostExecute(...) {

.....

    if( mListener != null ) {

        mListener.onResultData(distance);

    }

}

실제로 AsyncTask 생성/실행하는 부분에서는 execute 호출 하기 전에 setOnResultListener(listener); 로 listener 등록하시구요.
And (1,760 포인트) 님이 2014년 7월 11일 답변
mcflurry님이 2014년 7월 11일 채택됨
답변 감사드립니다! 말씀해주신 방향으로 좀 더 공부해서 도전해봐야겠네요!
...