0

Web サービスに接続して何かを取得し、画面に出力する AsyncTask クラスがあります。
これが私のコードです:

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
するために使用したいアクティビティがもう 1 つありますが、 の冒頭でを にキャストします。 問題は、AsyncTask クラスを 1 つだけ使用して、それを呼び出してクレジットを得る方法です。GetCreditAsyncTasktxtView
GetCreditAsyncTaskcallerActivityMainActivity

4

1 に答える 1

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


}
于 2012-11-13T03:51:10.453 に答える