调用新的Asynctask时定义onPostExecute

Che*_*tah 0 java android abstract-class interface

我创建了一个扩展类Asynctask.从多个活动中调用此类.它从网页获取一些数据.之后,根据url,数据将在onPostExecute方法中处理.现在我使用多个else if语句,但它有点不方便.

有没有办法onPostExecute在创建新的Activity的Activity中定义方法Asynctask.

我认为它可能适用于接口或抽象方法,但我不确定,也不知道如何.

Ben*_*oli 6

你可以不需要额外的工作就可以做到.

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

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

}
Run Code Online (Sandbox Code Playgroud)

并在活动中:

MyTask t = new MyTask()
    {
        @Override
        protected void onPostExecute(Void result)
        {
            super.onPostExecute(result);
            // do some work             
        }
    };
Run Code Online (Sandbox Code Playgroud)


Dee*_*eeV 5

您为onPostExecute运行时将调用的AsyncTask注册一个事件侦听器.

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();
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

自定义图案以适合您需要的任何设计.在侦听器需要为每个事件提供的接口方法中包含任何参数.如果你有一个实现的类Example.ExampleListener,那么你只需要通过调用来启动它new Example(this).execute().