2012-11-13 36 views
0

我有一個AsyncTask類,它連接到Web服務以獲取內容並打印到屏幕上。
這裏是我的代碼:如何使用一個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建議的接口溶液的替代,也可以使'GetCreditAsyncTask'一個抽象類,它僅包含用於'doInBackGround(...)'共享邏輯。然後,在您的活動中,您可以擴展此任務,並提供特定於該活動的'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); 
    } 


} 
相關問題