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

AsyncTask에서 현재 액티비티 얻는법 질문입니다

0 추천
예를들어서

MainActivity에서 AsyncTask를 호출했다합니다.

 

그러면  AsyncTask의 onPostExecute에서

또 다른 매서드를 콜 할 때 파라미터로

MainActivity(단순한 클래스가 아니라 액티비티)를 넘겨줘야 합니다.

 

이럴경우 어떤식으로 코드를 작성해야 할까요ㅠㅠ

제가 초보라..되도록 코드를 갖고 해주시면 감사드리겠습니다 (_ _)
익명사용자 님이 2016년 10월 8일 질문

1개의 답변

0 추천

님 말씀처럼 할 수도 있지만 MainActivity에 AsyncTask 코드가 종속이 되기 때문에 별로 좋은 디자인은 아니라고 생각합니다.
그것보다는 콜백인터페이스를 사용하시는게 좋습니다. 아래 샘플 코드를 참고하세요.

//T, S, R 은 님이 어떤 타입의 데이터를 사용하시는지 모르기 때문에 Generic Type으로 대신했습니다.
//저 부분은 님이 쓰셔야할 데이터타입으로 바꾸시면 됩니다.
public class MyAsyncTask extends AsyncTask<T, S, R> {
        
        private MyAsyncTaskListener listener; 

        public MyAsyncTask(MyAsyncTaskListener listener) {
             this.listener = listener;
        }
      
       @Override
       protected R doInBackground(T... params) {
              //여기에서 서버의 API를 콜한다던가 하는 작업을 하시고
              //R 타입의 데이터를 리턴해 주세요.
              return null; 
       }

     @Override
     protected void onPostExecute(R result) {
          if (listener != null) {
                 listener.doSomething(result);
          }
     }

     public static interface MyAsyncTaskListener<T> {
           public void doSomething(R result);
     }
}

public class MainActivity extends Activity {

        private void callMyAsyncTask() {
              MyAsyncTask task = new MyAsyncTask(new MyAsyncTask.MyAsyncTaskListener(){
                    @Override
                    public void doSomething(R result) {
                           //여기서 result를 받아서 액티비티에서 필요한 처리(보통, 화면 업데이트)를 하시면 됩니다.
                    }
               });
        }
}

 

spark (227,930 포인트) 님이 2016년 10월 8일 답변
...