【问题标题】:Socket.connect doesn't throw exception in AndroidSocket.connect 在 Android 中不会抛出异常
【发布时间】:2013-05-13 12:12:35
【问题描述】:

如果我输入了一个无意义的 url,则不会引发异常,并且我的其余代码都不会执行,即使是调用连接方法的 asynctask 的其余部分也不会执行。

try {
        socketCliente.connect(new InetSocketAddress("f", port), 2000);

    } catch (UnknownHostException e) {
        getError("Host doesn't exist");
        return -1;
    } catch (IOException e) {
        getError("Could not connect: The host is down");
        return -1;
    }

【问题讨论】:

  • 你有上网权限吗?此代码是否在 UI 线程上运行?
  • 尝试捕获一般异常而不是 IO 和 UnknownHost 异常?我预见您可能会收到格式错误的 URL,而不是您正在捕获的 2。
  • @ChorWaiChun 尽管OP怎么说,这段代码中没有URL。
  • @blackbelt,是的,它有权限,我试图在用户设置不存在的 url 时进行处理。连接代码位于从异步任务创建的对象中。
  • @EJP is not "f" in new InetSocketAddress("f", port) 指的是格式错误的 URL?

标签: android sockets exception connect


【解决方案1】:

很奇怪,能不能多加两行如下,看看有什么效果。

另外,在日志中,注意这两行之间的时间差。

try {
    Log.w("SOCKET", "Trying to connect...");
    socketCliente.connect(new InetSocketAddress("f", port), 2000);
    Log.w("SOCKET", "Connected. No exception");

} catch (UnknownHostException e) {
    getError("Host doesn't exist");
    return -1;
} catch (IOException e) {
    getError("Could not connect: The host is down");
    return -1;
}

【讨论】:

    【解决方案2】:

    添加另一个 catch 语句。

    catch ( Exception e ) {
        Log.d(TAG, e.getMessage(),e);
        Toast.makeText(getApplicationContext(), "Unexpected Error:" + e.getMessage(), Toast.LENGTH_LONG).show();
    }
    

    这将写入日志并弹出一个 toast 来告诉你发生了什么。

    【讨论】:

    • 不抛出异常,连接线后不执行任何其他操作。
    • 它可能正在尝试连接。最终会超时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2012-01-31
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多