Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android匿名回调函数_Android_Android Asynctask - Fatal编程技术网

Android匿名回调函数

Android匿名回调函数,android,android-asynctask,Android,Android Asynctask,我开发了一个类来管理对服务器的所有API调用(通过AsyncTask) 问题是,我想在doInBackground()之后,在onPostExecute()中向外部传递一个回调函数,该函数将在onPostExecute()中执行 这样,我就可以使我的通信类保持通用性,活动将向它发送一个回调来激活和更新UI 知道我该怎么做吗 谢谢 给你,伙计: public class ApiMethods { public interface OnCommandFinished { public vo

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

这样,我就可以使我的通信类保持通用性,活动将向它发送一个回调来激活和更新UI

知道我该怎么做吗

谢谢

给你,伙计:

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....");
    }
}
公共类方法{
命令的公共接口已完成{
公共void onapisucces(字符串结果);
公共无效onApiError(字符串错误);
}
公共类空(参数…,oncommand完成响应){
新建runRequestTask(respondTo).execute(uri,参数);
}
私有类runRequestTask扩展了AsyncTask{
私人最终会议记录和完成的会议记录;
公共运行请求任务(OnCommand和Finished respondTo){
mRespondTo=respondTo;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//如果成功
mRespondTo.onAtomicSuccess(结果);
//如果错误
mRespondTo.onApiError(“404…”);
}
}
}

要运行代码,只需使用一个类调用
like(…)
,该类实现了
OnCommandFinished

,如下所示:

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....");
    }
}
公共类方法{
命令的公共接口已完成{
公共void onapisucces(字符串结果);
公共无效onApiError(字符串错误);
}
公共类空(参数…,oncommand完成响应){
新建runRequestTask(respondTo).execute(uri,参数);
}
私有类runRequestTask扩展了AsyncTask{
私人最终会议记录和完成的会议记录;
公共运行请求任务(OnCommand和Finished respondTo){
mRespondTo=respondTo;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//如果成功
mRespondTo.onAtomicSuccess(结果);
//如果错误
mRespondTo.onApiError(“404…”);
}
}
}


要运行代码,只需使用实现
OnCommandFinished
的类调用
like(…)
,尽管答案被接受,但只需添加另一个真正的匿名实现。希望这能帮助别人

您的接口:您可以在AsyncTask类中实现此功能

public interface ImageLoaderListener{
    void imageDownloaderCallBack(Bitmap bmp);
}
异步任务类构造函数:

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

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}
@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();
onPostExecution:

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

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}
@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();
活动类中的实现:

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

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}
@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();

另外,您应该记住,如果需要根据
imageDownloaderCallBack
返回值更新任何Ui元素,那么应该将该代码写入函数本身

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

您的接口:您可以在AsyncTask类中实现此功能

public interface ImageLoaderListener{
    void imageDownloaderCallBack(Bitmap bmp);
}
异步任务类构造函数:

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

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}
@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();
onPostExecution:

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

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}
@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();
活动类中的实现:

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

public ImageDownloader(String link, ImageLoaderListener listener){
    this.link = link;
    this.listener = listener;
}
@Override
protected void onPostExecute(Void result){
    listener.imageDownloaderCallBack(bitmap);
    // your code, i was returning bitmap
}
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
     @Override
     public void imageDownloaderCallBack(Bitmap bmp) {
            // update Ui elements
     }
});
imageDownloader.execute();

另外,您应该记住,如果需要根据
imageDownloaderCallBack
返回值更新任何Ui元素,那么应该将该代码写入函数本身

。用黑带核对答案。寻找类似的东西?。用黑带核对答案。寻找类似的东西吗?对于
respondTo
参数,
respondTo
将传递什么到
like(…)
中?
respondTo
只是预期结果的接口,调用者。调用者首先调用带有一些参数的
like
方法,这实际上取决于您的实现。对于
respondTo
参数,您将向
like(…)
传递什么?
respondTo
只是期望结果的接口,调用者。调用者通过调用带有一些参数的
like
方法开始了这件事,这实际上取决于您的实现。