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