我的应用程序尝试使用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断开连接,但是在这种情况下,也没有向用户发送消息。怎么了?
请注意,与onErrorCodeBytes
,onErrorCodeJSON
和onErrorCodeString
一起使用的错误代码处理程序似乎正常工作(例如,如果我有404 http代码,则会调用它们)。 / p>
答案 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 -> {});
});