处理代号为1的网络线程异常

时间:2018-12-04 10:18:09

标签: codenameone

我的应用程序尝试使用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代码,则会调用它们)。 / p>

1 个答案:

答案 0 :(得分: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 -> {});
});