1

我在 6 种不同的活动上有一个按钮。根据活动的不同,单击该按钮可以使用不同的参数执行几乎相同的任务。

这将使用 an 来完成,AsyncTask并且onPostExecute()按钮状态将被更改。

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 并更改各自的视图?

4

2 回答 2

1

您应该使用 onSuccess、onFailure 方法创建 Task 并覆盖它们。

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");
    }
}
于 2013-05-10T07:27:10.180 回答
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");
    }
}
于 2013-05-10T07:24:36.547 回答