2012-01-25 3 views
5

android.os.AsyncTask 클래스를 일반적으로 하위 클래스로 만들려고합니다. 기본적으로 속성을 추가하고 싶습니다. 것은, 나는 여전히 익명의 클래스로 사용할 수 있기를 원한다.Java : AsyncTask 서브 클래 싱

import android.content.Context; 
    import android.os.AsyncTask; 

    public class KAsyncTask extends AsyncTask<Params, Progress, Result> { 
     public Context c; 

    } 

나는 서브 클래 싱을 시도했지만, 나는 이것을 어떻게 해야하는지 내 머리에 감쌀 수 없다.

감사합니다, 당신은 당신을 의미

+0

이 –

답변

16

는 여전히 AsyncTask를 같은 추상 템플릿 클래스되고 싶어 EZFrag? 선언은 다음과 같습니다

내가 제대로 질문을 이해한다면
public abstract class KAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> { 
    public Context c; 

} 
+0

감사 르우벤을 http://www.etosis.com/posts/asynctask-helpers, 그했다. 내일 당신의 대답을 받아 들일 것입니다 ... 나는 내가 한 일을 나누고 싶습니다. – EZFrag

2

, 당신은 인스턴스화 할 수있는 방법을 찾고 있습니다 익명 또한 인스턴스 변수를 가지고AsyncTask 내부. 그 추가 값을 AsyncTask에 어떻게 전달할 계획입니까?

AFAIK, Java에서는 익명 내부 클래스의 생성자를 재정의 할 수 없습니다. 따라서 유일한 희망은 Params 유형 (Varargs 일 수 있음)의 일부로 Context을 전달하는 것입니다. 즉, Params 유형을 Context으로 만들어야 함을 의미합니다. Stringserialize/ParcelContextString으로 사용하십시오. 나는 솔직히 이것이 노력할만한 가치가 없다고 느끼고 너무 많은 해킹입니다.

익명의 이유가 있습니까?AsyncTask? 난 그냥 AsyncTask의 명명 된 구현을 만드는 것이 좋습니다.

+0

+1, 문제의 IMO에 대해 생각하는 올바른 방법입니다. – Guillaume

6

감사합니다. Reuben, 100 % 예상대로 작동합니다. 여기

내가 지금 무엇을 가지고 :

import android.content.Context; 
    import android.os.AsyncTask; 

    public abstract class KAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> { 
     public Context context; 

     public KAsyncTask<Params, Progress, Result> setContext(Context c){ 
      this.context = c; 
      return this; 
     } 
    } 

을 그리고 이것은 내가 그것을 사용하는 방법입니다

new KAsyncTask<Void, Void, Void>() { 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      Toast.makeText(context, "Connecting to Server...", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // TODO Auto-generated method stub 
      //super.onPostExecute(result); 
      Toast.makeText(context, "Responce Recieved.", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 

      //Do webservice calls in here 

      return null; 
     } 

    }.setContext(this).execute(); 

내가 작업 자체에서 사용자에게 메시지를 표시하기 위해 문맥을 필요로했다. 이 예제를보고 싶어 할 수

감사합니다, EZFrag

+1

서브 클래 싱없이 익명의 AsynkTask에서 YourActivityName.this를 사용할 수도 있습니다. –