我正在尝试处理用户在AsyncTask中的Http请求期间丢失数据连接的情况。目前AsyncTask永远不会完成执行,如果这发生,应用程序只是停止。我甚至无法检查isCancelled(),因为Http请求只是在一个函数调用上停止,所以我无法实现循环或任何东西。
我在UI线程中使用以下内容,但我无法弄清楚如何检查任务是否已从任务中取消:
task = new LoginTask();
task.execute(this, mUsername, mPassword);
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
if (task != null && task.getStatus() == AsyncTask.Status.RUNNING)
{
task.cancel(true);
}
}
}, 5000);
答案 0 :(得分:0)
为了停止处理,你需要在doInBackground()中检查isCancelled()。如果在doInBackground中有任何合理的位置,可以添加if语句。否则,您应该考虑在http连接上设置超时。
答案 1 :(得分:0)
由于KSoap 2是用Java编写的,因此您可以选择抽象其中一个类并在HttpConnection上手动设置超时。
根据我们之前的讨论,您可能必须覆盖不在连接上设置超时的方法,并将其替换为您自己的方法和超时的连接。由于KSoap是open source,应该是可管理的!祝你好运。