如何使用一个AsyncTask类在Android中应用不同的活动

如何使用一个AsyncTask类在Android中应用不同的活动,android,Android,我有一个AsyncTask类,它连接到web服务以获取某些内容,然后打印到屏幕上。 这是我的密码: public class GetCreditAsyncTask extends AsyncTask<Object, Boolean, String>{ private MainActivity callerActivity; private String credit; public GetCreditAsyncTask(Context context){

我有一个AsyncTask类,它连接到web服务以获取某些内容,然后打印到屏幕上。
这是我的密码:

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);
   }


}
公共类GetCreditAsyncTask扩展了AsyncTask{
私人的主要活动是实用性;
私人信用;
公共GetCreditAsyncTask(上下文){
callerActivity=(MainActivity)上下文;
}
@凌驾
受保护字符串doInBackground(对象…参数){
……做点什么,获得荣誉
}
@凌驾
受保护的void onPostExecute(字符串响应){
callerActivity.txtView.setText(贷方);
}
}
它工作得很好,但现在,我还有一个活动
ProfileActivity

还希望使用
GetCreditAsyncTask
获取信用并将其打印到
txtView

但是在
GetCreditAsyncTask
的开始,我将
callerActivity
转换为
MainActivity


问题是如何只使用一个AsyncTask类,这样我就可以调用它并获得积分

您可以定义两个活动都实现的接口。您必须强制转换到此接口,而不是强制转换到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);
   }


}
公共接口活动侦听器{
公共void setText(字符串文本);
}
公共类MainActivity扩展活动实现ActivityListener{
...
公共void setText(字符串文本){
TextView tv=findviewbyd(R.id.main\u text);
tv.setText(文本);
}
}
公共类SecondActivity扩展活动实现ActivityListener{
...
公共void setText(字符串文本){
TextView tv=findviewbyd(R.id.secondary_text);
tv.setText(文本);
}
}
公共类GetCreditAsyncTask扩展了AsyncTask{
私人活动;实用性;
私人信用;
公共GetCreditAsyncTask(上下文){
callerActivity=(ActivityListener)上下文;
}
@凌驾
受保护字符串doInBackground(对象…参数){
……做点什么,获得荣誉
}
@凌驾
受保护的void onPostExecute(字符串响应){
callerActivity.setText(信贷);
}
}

作为@FlávioFaria建议的接口解决方案的替代方案,您还可以将
GetCreditAsyncTask
作为一个抽象类,它只包含
doInBackGround(…)的共享逻辑。
。然后,在您的活动中,您可以扩展此任务,并为特定于该活动的
onPreExecute(…
onPostExecute(…)
提供实现。