Android 任务挂起
使用Android 任务挂起,android,Android,使用isValid.execute(address)调用以下函数,然后调用isValid.get()获取响应。但是,它挂起,返回的是布尔值(true或false) 我用来调用代码的位是: IsValid isValid = new IsValid(); try { isValid.execute(addr); success = isValid.get(); } catch (Exception e) { success = false; } return success
isValid.execute(address)
调用以下函数,然后调用isValid.get()
获取响应。但是,它挂起,返回的是布尔值(true或false)
我用来调用代码的位是:
IsValid isValid = new IsValid();
try {
isValid.execute(addr);
success = isValid.get();
}
catch (Exception e) {
success = false;
}
return success;
是有效的类
public class IsValid extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
Boolean success = false;
try {
SocketAddress sockaddr = new InetSocketAddress(params[0], 80);
// Create an unbound socket
Socket sock = new Socket();
// This method will block no more than timeoutMs.
// If the timeout occurs, SocketTimeoutException is thrown.
int timeoutMs = 2000; // 2 seconds
Logit(TAG,"" + sockaddr.toString());
sock.connect(sockaddr, timeoutMs);
success = true;
}
catch (Exception exc) {
success = false;
}
return success;
}
@Override
protected Boolean onPostExceute(Boolean result) {
Logit(TAG,"IN POST, RESULT IS = "+result);
return result;
}
}
public类是有效的扩展异步任务{
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功=假;
试一试{
SocketAddress sockaddr=新的InetSocketAddress(参数[0],80);
//创建未绑定的套接字
插座插座=新插座();
//此方法最多只能阻止超时。
//如果发生超时,则抛出SocketTimeoutException。
int timeoutMs=2000;//2秒
Logit(标记“”+sockaddr.toString());
sock.connect(sockaddr,timeoutMs);
成功=真实;
}
捕获(异常exc){
成功=错误;
}
回归成功;
}
@凌驾
受保护的布尔OnPostExcute(布尔结果){
Logit(标记“在POST中,结果为=”+结果);
返回结果;
}
}
如果你读了这篇文章:
看起来你也有类似的情况。
您正在启动一个异步任务,然后等待结果,这是没有意义的
相反,您应该设置一个回调,并使用它来获取结果
使用isValid.execute(address)调用,然后调用isValid.get()
。不清楚你到底在做什么。请将呼叫代码添加到您的帖子中。话虽如此,您永远不应该使用.get()调用AsyncTask。它应该是受保护的void onpostexute(布尔结果),因为您无法返回结果。相反,您应该在onPostExecute()中处理结果。此外,我认为您尝试两次执行AsyncTask实例,这是不可能的。因此,在您发布调用代码后,我们确认这是错误的方法。只需使用newisvalid().execute(addr)和句柄结果。“onPostExecute”实际上应该是“onPostExecute”。