2012-11-13 2 views
0

웹 서비스에 연결하는 AsyncTask 클래스가있어서 뭔가를 얻은 다음 화면에 인쇄합니다.
여기 내 코드입니다 : 그것은 완벽하게 작동하나의 AsyncTask 클래스를 사용하여 Android에서 다른 활동을 적용하는 방법

public class GetCreditAsyncTask extends AsyncTask<Object, Boolean, String>{ 
    private MainActivity callerActivity; 
    private String credit; 
    public GetCreditAsyncTask(Context context){ 
     callerActivity = (MainActivity)context; 
    } 
    @Override 
    protected String doInBackground(Object... params) { 
     .....//do something and get the credit 
} 
    @Override 
    protected void onPostExecute(String response) { 
      callerActivity.txtView.setText(credit); 
    } 


} 

그러나 지금, 나는 또 하나 개의 활동을 ProfileActivity
또한 신용을 얻을 수 GetCreditAsyncTask을 사용하고 txtView에 인쇄 할 ,
만에이 GetCreditAsyncTask으로 시작하여 callerActivityMainActivity으로 캐스팅합니다.
질문은 하나의 AsyncTask 클래스를 사용하여 호출하고 크레딧을받을 수있는 방법입니다.

+0

는 @ FlávioFaria에 의해 제안 된 인터페이스 솔루션에 대한 대안, 당신도 할 수 있듯이'유일한'doInBackGround (...)'의 공유 논리를 포함하는 추상 클래스를 GetCreditAsyncTask'. 그런 다음 당신의 활동에서이 작업을 확장하고 해당 활동에 특정한'onPreExecute (...'와'onPostExecute (...)'에 대한 구현을 제공 할 수 있습니다. –

답변

0

두 액티비티가 구현하는 인터페이스를 정의 할 수 있습니다. MainActivity로 캐스팅하는 대신이 인터페이스로 캐스팅해야합니다.

public interface ActivityListener { 
    public void setText(String text); 
} 


public class MainActivity extends Activity implements ActivityListener { 

... 

    public void setText(String text) { 
     TextView tv = findViewById(R.id.main_text); 
     tv.setText(text); 
    } 

} 


public class SecondActivity extends Activity implements ActivityListener { 

... 

    public void setText(String text) { 
     TextView tv = findViewById(R.id.secondary_text); 
     tv.setText(text); 
    } 

} 


public class GetCreditAsyncTask extends AsyncTask<Object, Boolean, String>{ 
    private ActivityListener callerActivity; 
    private String credit; 
    public GetCreditAsyncTask(Context context){ 
     callerActivity = (ActivityListener) context; 
    } 
    @Override 
    protected String doInBackground(Object... params) { 
     .....//do something and get the credit 
} 
    @Override 
    protected void onPostExecute(String response) { 
      callerActivity.setText(credit); 
    } 


} 
관련 문제