我已經開發了管理我所有的API調用到我的服務器(通過AsyncTask
) 問題是,我的doInBackground()
後想一類,在onPostExecute()
通過外部將在執行的回調函數onPostExecute()
。Android的匿名回調函數
通過這種方式,我可以保持通信類的通用性,並且Activity會發送一個回調來激活和更新UI。
任何想法我該怎麼做?
謝謝!
我已經開發了管理我所有的API調用到我的服務器(通過AsyncTask
) 問題是,我的doInBackground()
後想一類,在onPostExecute()
通過外部將在執行的回調函數onPostExecute()
。Android的匿名回調函數
通過這種方式,我可以保持通信類的通用性,並且Activity會發送一個回調來激活和更新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
你會爲「respondTo」參數傳入「like(...)」嗎? –
'respondTo'只是預期結果的接口,調用者。調用者通過調用具有一些參數的''''''方法來啓動這個事情,這真的取決於您的實現。 – Sean
雖然答案已被接受,只是增加一個類,真實匿名執行。希望這有助於他人。
你的界面:你可以在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
}
在活動類實現:
ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){
@Override
public void imageDownloaderCallBack(Bitmap bmp) {
// update Ui elements
}
});
imageDownloader.execute();
另外,您應該記住,如果有任何UI元素需要根據imageDownloaderCallBack
返回值進行更新,則應該將該代碼寫入函數本身。
http://stackoverflow.com/questions/16752073/how-do-i-return-a-boolean-from-asynctask/16752189#16752189。用黑帶檢查答案。尋找類似的東西? – Raghunandan