2013-05-10 71 views
1

我有6个不同的活动按钮。点击该按钮可以根据活动执行几乎相同的具有不同参数的任务。使用相同的AsyncTask更新不同的视图

这将使用AsyncTaskonPostExecute()完成按钮状态将被改变。

someButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     new Task().execute("param1", "param2"); 
    } 
} 

private class Task extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     //background task using params[0], params[1] 
     return "success" or "error"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     if (result == "success") { 
      //change the someButton state 
     }else{ 
      //show an error message 
     } 
} 

代替具有在所有的6个活动相同的AsyncTask的,如何可以使用一个单一的AsyncTask从所有的活动和改变相应视图?

+0

利用活动的环境。您可以将上下文作为参数传递给Asynctask。 – Anukool 2013-05-10 07:20:30

+0

是没有问题是显示吐司等,但我怎么能改变该具体活动的看法 – 2013-05-10 07:22:59

回答

1

您应该创建任务,其中m方法onSuccess,onFailure并覆盖它们。

public class Task extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     //background task using params[0], params[1] 
     return "success" or "error"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     if (result == "success") { 
      onSuccess(result); 
     }else{ 
      onFailure(result); 
     } 
    } 

    protected void onSuccess(String result) {}; 
    protected void onFailure(String result) {}; 
} 

,然后在活动中使用这样的:

someButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     new Task(){ 
      @Override 
      protected void onSuccess(String result){ 
       // do what you want 
      } 
      @Override 
      protected void onFailure(String result){ 
       // do what you want 
      } 
     }.execute("param1", "param2"); 
    } 
} 
1

把你的Task放在它自己的文件中并公开。

创建一个回调接口:

public interface TaskCallback { 
    public void onSuccess(String result); 
    public void onFailure(String errorMessage); 
} 

给这样一个回调到您Task

public class Task extends AsyncTask<String, Void, String> { 
    private TaskCallback callback; 

    public Task(TaskCallback callback) { 
     this.callback = callback; 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     //background task using params[0], params[1] 
     return "success" or "error"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (result == "success") { 
      callback.onSuccess(result); 
     } else{ 
      callback.onFailure(errorMessage); 
     } 
    } 
} 

并创造你的活动Task实例时,则实现回调:

someButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     private TaskCallback callback = new TaskCallback() { 
      @Override 
      public void onSuccess(String result) { 
       //change the someButton state 
      } 
      @Override 
      public void onFailure(String errorMessage) { 
       //show an error message 
      } 
     } 
     new Task(callback).execute("param1", "param2"); 
    } 
}