我开发了一个类来管理我对服务器的所有 API 调用(通过AsyncTask
)问题是,我希望在doInBackground()
,之后onPostExecute()
从外部传递一个回调函数,该函数将在onPostExecute()
.
这样,我可以保持我的通信类通用,Activity 会向它发送一个回调来激活和更新 UI。
知道我该怎么做吗?
谢谢!
我开发了一个类来管理我对服务器的所有 API 调用(通过AsyncTask
)问题是,我希望在doInBackground()
,之后onPostExecute()
从外部传递一个回调函数,该函数将在onPostExecute()
.
这样,我可以保持我的通信类通用,Activity 会向它发送一个回调来激活和更新 UI。
知道我该怎么做吗?
谢谢!
尽管接受了答案,但只需添加另一个真正的匿名实现。希望这对其他人有帮助。
你的接口:你可以在 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 元素,您应该在函数本身中编写该代码。
来了,伙计:
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