【问题标题】:Handle Network Thread exceptions in Codename One处理代号一中的网络线程异常
【发布时间】:2018-12-05 13:16:29
【问题描述】:

我的应用尝试在应用启动时使用RequestBuilder request = Rest.get 发出异步网络请求,如本文所述:https://www.codenameone.com/blog/rest-api-error-handling.html。如果我关闭我的测试服务器,在应用启动时我会遇到这个异常:

[Network Thread] 0:0:0,586 - Exception: java.net.ConnectException - Connection refused

但不会向用户显示任何信息、消息或对话框。 init() 中的以下样板代码未被调用:

    addNetworkErrorListener(err -> {
        // prevent the event from propagating
        err.consume();
        if (err.getError() != null) {
            Log.e(err.getError());
        }
        Log.sendLogAsync();
        Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
    });

如果我使用request.onError(networkError); 提供自定义网络错误处理程序,问题是一样的:我的网络错误处理程序没有被调用。我试图实现它(它与上面的样板代码非常相似):

private static final ActionListener<NetworkEvent> networkError = new ActionListener<NetworkEvent>() {
        @Override
        public void actionPerformed(NetworkEvent err) {
            Log.p("NETWORK ERROR connecting to the server");
            err.consume();
            if (err.getError() != null) {
                Log.e(err.getError());
            }
            Log.sendLogAsync();
            DialogUtilities.genericNetworkError();
        }
    };

我尝试在服务器离线的情况下使用模拟器。然后我尝试使用 Android 和 iOS 应用程序,断开设备与 Internet 的连接,但在这种情况下也没有向用户发送消息。怎么了?

请注意,与 onErrorCodeBytesonErrorCodeJSONonErrorCodeString 一起使用的错误代码处理程序似乎可以正常工作(例如,如果我有 404 http 代码,则会调用它们)。

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    你定义onError了吗? 应该为异常调用它,并且一旦定义,它可能会覆盖全局错误处理逻辑。

    我在关闭 wifi 的情况下尝试了这个案例,它似乎工作正常:

    Button test = new Button("Test");
    test.addActionListener(e -> {
        Rest.get("https://www.codenameone.com/").
            onError(ee -> {  
                if(ee.getError() != null) {
                    Log.e(ee.getError());
                }
            }).
            fetchAsBytes(call -> {});
    });
    

    【讨论】:

    • 它在模拟器中对你有用吗?正如我在问题中报告的那样,我尝试了 onError 。我想在出现网络错误时显示 Toastbar 或 Dialog,但我不能(在模拟器、Javascript 端口和本机应用程序上进行了测试)。我不明白为什么它对你有用而不对我有用。你有什么提示吗?似乎离线情况会产生网络线程异常但不会产生网络事件......
    • 它在模拟器中对我有用,我没有在其他地方测试。你能得到错误的堆栈跟踪吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2013-10-06
    相关资源
    最近更新 更多