我想做一些简单的事情,但我无法在Google搜索中表达。所以,我来这里^^
我有这样的异步任务:
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 ...
}
});
}
}
但是,不要使用&#34;内联&#34;作为回调函数,是否可以做这样的事情:(如果是,怎么做?)
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
}
}
谢谢!
答案 0 :(得分:0)
创建一个静态类:
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
}
因为您的回调应该是对象类型之一而不是方法。它也不是内联方法,它是我们调用的匿名类,它与上面定义的类非常相似,除了它没有任何名称,但你通过覆盖实现该方法。
答案 1 :(得分:0)
您可以将回调方法创建为静态,然后使用反射来调用它。您在该解决方案中遗漏的主要内容是类型安全;您可以将要在任务完成时调用的类作为MyClass.class传递。