Android匿名回调函数

时间:2013-05-26 20:08:13

标签: android android-asynctask

我开发了一个类来管理我对服务器的所有API调用(通过AsyncTask) 问题是,我希望在doInBackground()之后onPostExecute()向外传递一个将在onPostExecute()中执行的回调函数。

通过这种方式,我可以保持我的通信类通用,并且Activity将向它发送一个回调来激活和更新UI。

知道我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:2)

你在这里交配:

public class ApiMethods {

public interface OnCommandFinished {
    public void onApiSuccess(String result);
    public void onApiError(String error);
}

public void like(PARAMS .... , OnCommandFinished respondTo){
    new runRequestTask(respondTo).execute(uri, params);
}

private class runRequestTask extends AsyncTask<Object, Void, String>{

    private final OnAtomicCommandFinished mRespondTo;

    public runRequestTask(OnCommandFinished respondTo){
        mRespondTo = respondTo;
    }

    @Override
    protected void onPostExecute(String result) {
        // IF SUCCESS   
        mRespondTo.onAtomicSuccess(result);

        // IF ERROR
        mRespondTo.onApiError("404....");
    }
}

}

要运行代码,只需使用实现like(...)

的类调用OnCommandFinished即可

答案 1 :(得分:2)

虽然接受了答案,但只需添加另一个真正的匿名实施。希望这能帮到别人。

你的界面:你可以在AsyncTask类中实现它。

public interface ImageLoaderListener{
    void imageDownloaderCallBack(Bitmap bmp);
}

AsyncTask类构造函数:

// declare interface variable
private ImageLoaderListener listener;
private String link;

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}

onPostExecution:

@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}

在Activity类中实现:

ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();

此外,您应该记住,如果需要根据imageDownloaderCallBack返回值更新任何Ui元素,您应该在函数本身内编写该代码。