Asynctask在android中

时间:2012-02-20 13:59:31

标签: android multithreading

我正在使用如下的异步任务。但我需要能够根据我使用下面的类的不同活动在onPostExecute中调用不同的函数。例如,当一个活动加载时,我将使用下面的类,但当用户点击活动中的listitem时,我想使用下面的同一个类,但回调功能需要不同?有没有办法在android中执行此操作。

class PerformOPTask extends AsyncTask<Void, String, ServerOutput> {
    // connector=new JSONConnector();
    Connector connector;
    String curUrl;
    ServerOutput currentSO;
    PerformOPTask(String url,ServerOutput serverOutput){
        //connector = new UnitTestConnector();
        connector = new JSONConnector();
        curUrl=url;
        currentSO=serverOutput;
    }

    @Override
    protected ServerOutput doInBackground(Void... params) {

        return connector.getData(URLUtils.getFormattedUrl(curUrl),currentSO);
    }

    @Override
    protected void onPostExecute(ServerOutput output) {
        displayData(output);
        Toast.makeText(BaseFragmentActivity.this, "Done!", Toast.LENGTH_SHORT).show();
    }
}

3 个答案:

答案 0 :(得分:3)

您可以在适配器中添加包含onComplete方法或类似内容的接口。然后,您可以在AsyncTask的构造函数中添加界面。像这样:

public interface OnTaskCompleteListener {
    void onComplete(ServerOuptput output);
}

onPostExecute()中,您可以拨打onComplete()

答案 1 :(得分:1)

你可以将一些Object传递给PerformOPTask(例如,可能是Activity实例,或者是一些enumaration,如果有2个选项,则是boolean),它将识别谁使用此类以及在onPostExecute()上调用哪个函数。

答案 2 :(得分:0)

两个答案都是正确的,你需要为此注入一个依赖。而personnaly我更喜欢将它们注入我自己的AsyncTasks子类的构造函数中。

@Maria Neumayer解决方案的优势在于它将提供比使用@narek.gevorgyan

解决方案更通用,更抽象和更具可扩展性的东西。