3 回答
TA贡献1812条经验 获得超5个赞
使用AsyncTask获得结果的一种干净方法是使用回调接口。
这是此概念的一个简单示例:
interface AsyncTaskCompleteListener<T> {
public void onTaskComplete(T result);
}
然后在你的B班上:
class B implements AsyncTaskCompleteListener<String> {
public void onTaskComplete(String result) {
// do whatever you need
}
public void launchTask(String url) {
A a = new A(context, this);
a.execute(url);
}
}
您现在应该将以下代码添加到您的A类中:
class A extends AsyncTask<String, Void, String> {
private AsyncTaskCompleteListener<String> callback;
public A(Context context, AsyncTaskCompleteListener<String> cb) {
this.context = context;
this.callback = cb;
}
protected void onPostExecute(String result) {
finalResult = result;
progressDialog.dismiss();
System.out.println("on Post execute called");
callback.onTaskComplete(result);
}
}
这样,您无需显式地等待任务完成,而是您的主代码(可能是主UI线程)在正常的android事件循环中等待,并且onTaskComplete方法将被自动调用,允许在那里处理任务结果。
TA贡献1821条经验 获得超6个赞
你能再详细点吗?我目前正在尝试转换此方法:public static int invokeWebServiceRequest(String uri,String username,String password,String targetKey); 在扩展AsyncTask的类中。我如何将那些参数(从旧方法中)传递给doInBackground(Params ...)?谢谢!
- 3 回答
- 0 关注
- 434 浏览
添加回答
举报