我想做一些简单的事情,但我无法在谷歌搜索中表达它。所以我就来了^^
我有一个像这样的异步任务:
class RequestTask extends AsyncTask<String, String, String> {
final MyCallbackInterface callback;
RequestTask(MyCallbackInterface callback) {
this.callback = callback;
}
@Override
protected String doInBackground(String... uri) {
...
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
callback.onTaskFinished(result);
}
}
interface MyCallbackInterface {
void onTaskFinished(String result);
}
因此,我有一个带有回调的任务,要在任务结束时执行。
现在我可以这样调用它:
class Program {
public void DoAsyncRequest(String stringUrl, MyCallbackInterface callback) {
new RequestTask(callback).execute(stringUrl);
}
public static void Main(){
DoAsyncRequest("http://toto.com", new MyCallbackInterface() {
@Override
public void onDownloadFinished(String result) {
//do something ...
}
});
}
}
但是,除了使用“内联”函数作为回调之外,是否可以做这样的事情:(如果是,怎么做?)
class Program {
public void DoAsyncRequest(String stringUrl, MyCallbackInterface callback) {
new RequestTask(callback).execute(stringUrl);
}
public static void Main(){
DoAsyncRequest("http://toto.com", MyCallBack);
}
private void MyCallBack(string result){
//do something
}
}
谢谢!
最佳答案
创建静态类:
private static class MyCallback implements MyCallbackInterface {
@Override
public void onDownloadFinished(String result) {
//do something ...
}
}
然后使用
调用DoAsyncRequest("http://toto.com", new MyCallBack());
你做不到
private void MyCallBack(string result){
//do something
}
因为您的回调应该是对象类型之一,而不是方法。而且它不是内联方法,它是我们调用的匿名类,它与上面定义的类非常相似,除了它没有任何名称,但您通过重写来实现该方法。
关于Java回调函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798511/