0

を拡張するクラスを作成しましたAsynctask。このクラスは、複数のアクティビティから呼び出されます。Webページからデータを取得します。その後、URLに応じて、データはonPostExecuteメソッドで処理されます。現在、複数のelse ifステートメントを使用していますが、少し不便です。

onPostExecute新しいを作成するアクティビティでメソッドを定義する方法はありますかAsynctask

インターフェイスや抽象メソッドで動作するかもしれないと思いますが、方法がわからないのでわかりません。

4

4 に答える 4

6

余計な手間をかけずにできます。

public class MyTask extends AsyncTask<Void, Void, Void>
{

    @Override
    protected Void doInBackground(Void... params)
    {
        // do some work
        return null;
    }

}

そしてアクティビティで:

MyTask t = new MyTask()
    {
        @Override
        protected void onPostExecute(Void result)
        {
            super.onPostExecute(result);
            // do some work             
        }
    };
于 2013-03-12T15:38:16.770 に答える
5

実行時に呼び出すAsyncTaskのイベントリスナーを登録しonPostExecuteます。

public class Example extends AsyncTask<Void, Void, Void> {

  public interface ExampleListener {
    public void onStart();
    public void onProgress();
    public void onFinish();
  }

  private ExampleListener listener;

  public Example(ExampleListener listener) {
    mListener = listener;
  }

  @Override
  public void onPreExecute() {
    ...
    mListener.onStart();
    ...
  }

  @Override
  public void onProgressUpdate(Void... v) {
    ...
    mListener.onProgress();
    ...
  }

  @Override
  public void onPostExecute(Void result) {
    ...
    mListener.onFinish();
    ...
  }
}

必要なデザインに合うようにパターンをカスタマイズします。リスナーが各イベントに必要なインターフェイスメソッドにパラメータを含めます。を実装するクラスがある場合は、Example.ExampleListenerを呼び出すことによってこれを開始するだけで済みますnew Example(this).execute()

于 2013-03-12T15:32:38.540 に答える
0

コードを改善するのに役立つ別のJava/ジェネリックな方法は、戦略パターンを使用することです。つまり、異なるデータ処理ごとに、同じインターフェースを実装する異なるクラスを作成します。そのようにして、新しい「戦略」を追加するには、新しいクラスが必要になるため、コードが明確になります。
例:

 public void onPostExecute(String result){
ResponParser responseParser;

if (result.equals("http://..1"));
responseParser = new ResponParser1();
else if (result.equals("http://..2"));
responseParser = new ResponParser1();

responseParser.parse();
}

ここで、ResponParser は具象クラスである ResponParser1 と ResponParser1 の両方によって実装されるインターフェースです。

于 2013-03-12T15:47:54.027 に答える
-1

インターフェイスを使用するのが最善のオプションですが、簡単にするために、onPostExecute()メソッドで実行できるRunnableをAsyncTaskに渡すこともできます。

于 2013-03-12T15:59:18.883 に答える