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”。