【问题标题】:codenameone: how to handle exception java.net.ConnectionException explicitly代号一:如何显式处理异常 java.net.ConnectException
【发布时间】:2016-08-19 12:36:55
【问题描述】:

codenameone:如何显式处理异常 java.net.ConnectionException 我想显式处理异常。目前,当我处理异常时,它首先隐式处理,其中详细显示屏幕上的异常消息。我不想在屏幕上显示详细的错误消息(弹出对话框)。 现在它显示异常 Java.net.Connection Exception: Connection denied for URL http:localhost/login connection denied. 而不是这条消息,我只想在弹出对话框中显示“连接被拒绝”消息

请告诉我如何解决它。

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    在移动设备上,错误可能与模拟器上的错误完全不同,因为我们正在处理表面下的原生 API。见networking section in the developer guide的错误处理部分:

    有两个不同的地方可以处理网络错误:

    • ConnectionRequest - 通过重写回调方法
    • NetworkManager 错误处理程序

    请注意,NetworkManager 错误处理程序具有优先权,因此您可以通过使用错误来定义网络错误处理的全局策略。

    例如如果我想阻止所有网络错误向用户显示任何内容,我可以这样做:

    NetworkManager.getInstance().addToQueue(request);
    NetworkManager.getInstance().addErrorListener((e) -> e.consume());
    

    首先使用匹配错误的 NetworkEvent 调用错误侦听器。使用该事件可防止其进一步向下传播到 ConnectionRequest 回调中。

    我们还可以覆盖请求中各种类型的错误回调,例如在出现服务器错误代码的情况下,我们可以这样做:

    ConnectionRequest request = new ConnectionRequest(url, false) {
        protected void handleErrorResponseCode(int code, String message) {
            if(code == 444) {
                // do something
            }
        }
        protected void handleException(Exception err) {
            // handle exception that occurred. Notice you can either have this or have the listener on the NetworkManager
        }
        protected void readResponse(InputStream input) {
            // just read from the response input stream
        }
    };
    NetworkManager.getInstance().addToQueue(request);
    

    【讨论】:

    • ConnectionRequest类超时异常如何处理?
    • 它将在错误侦听器/handleException 方法中表现出来。
    • 你能举例说明一下吗?
    • 上面的例子涵盖了,我稍微细化了
    • 这是一个服务器端错误 (500),所以除了向用户显示错误之外,您无能为力。
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多