专家,
我的目标很简单,输入一个地址,点击一个按钮来测试一个URL,如果没有得到预期的结果,一个Toast信息然后什么都不做。如果得到期望结果,继续该程序。
由于我不能在UI线程中使用URL,我使用了AsyncTask,问题是:虽然我知道AsyncTak的结果,但是如何通知活动做什么或什么也不做? 我想要的是OnClickListener中的一个语句,如下所示:
if (result is not expected) return; else continue do things.
我不能在onPostExecute中写上面的语句,它将返回onPostExecute(),而不是onClickLIstener()。
另一个是:即使我可以将结果传递给activity(即onClickLIstener()),当结果到达时,UI线程可能已经运行了一些其他代码,但是在知道结果之前它们不应该。
简而言之,我需要URL结果来决定如何运行剩余代码,因此不能使用异步任务,我该怎么办?
感谢。
以下是示例代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new XXX().execute(code);
});
}
class XXX extends AsyncTask<String, Void, String> {
protected String doInBackground(String... strArr) {
XXXXX;
}
protected void onPostExecute(String result) {
XXXXX;
}
}
答案 0 :(得分:1)
这应该很容易。试试这种方法:
由于您已将AsyncTask作为活动中的内部类,因此您可以轻松地在onPostExecute()
中返回结果,然后检查请求是否成功。
现在,这是最后一部分:在您的活动中创建一个方法,如下所示:
private void executeOnAsyncSuccess(){
//place the code here you want to run
}
现在您可以轻松地在onPostExecute()
内拨打电话了!
您也可以使用Events
执行此操作,但这种方法应该可行!
我希望这有帮助!
答案 1 :(得分:0)
我刚刚了解到可能Callable是一个好方法,使用它的V get()。