Codenameone 区分服务器端错误和连接问题
如代码名“一篇博文”所述: 更好的错误代码处理 直到最近,如果我们收到一个错误响应代码,它还没有被发送 通过全局错误处理程序,并通过本地错误处理程序进行处理 先处理链条。这种情况已不再存在,这些错误正在发生 现在处理正确了 然而,如果你依赖旧版本的错误行为Codenameone 区分服务器端错误和连接问题,codenameone,Codenameone,如代码名“一篇博文”所述: 更好的错误代码处理 直到最近,如果我们收到一个错误响应代码,它还没有被发送 通过全局错误处理程序,并通过本地错误处理程序进行处理 先处理链条。这种情况已不再存在,这些错误正在发生 现在处理正确了 然而,如果你依赖旧版本的错误行为 setHandleErrorCodesInGlobalErrorHandler(布尔值)。这默认为 如果为true,则可以将其设置为false以更改默认行为 因此,服务器端错误和连接问题都会调用全局错误处理程序。能够以最通用的方式管理网络错误
setHandleErrorCodesInGlobalErrorHandler(布尔值)
。这默认为
如果为true,则可以将其设置为false以更改默认行为
因此,服务器端错误和连接问题都会调用全局错误处理程序。能够以最通用的方式管理网络错误是一件非常好的事情,但是我需要区分服务器端错误和连接问题
经过一些测试,我编写了以下代码,在模拟器、Android和iOS上进行了测试:
addNetworkErrorListener(err -> {
// prevents the event from propagating
err.consume();
if (err.getError() != null) {
// this is the case of a network error,
// like: java.io.IOException: Unreachable
Log.p("Error connectiong to: " + err.getConnectionRequest().getUrl());
// maybe there are connectivity issues, let's try again
ToastBar.showInfoMessage("Trying to reconnect...");
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
err.getConnectionRequest().retry();
}
}, 2000);
} else {
// this is the case of a server error
// logs the error
Log.p("REST ERROR\nURL:" + err.getConnectionRequest().getUrl()
+ "\nMethod: " + err.getConnectionRequest().getHttpMethod()
+ "\nRequest body: " + err.getConnectionRequest().getRequestBody()
+ "\nResponse code: " + err.getConnectionRequest().getResponseCode()
+ "\nResponse message: " + StringUtilities.toString(err.getConnectionRequest().getResponseData()),
Log.ERROR);
Log.sendLogAsync();
ToastBar.showErrorMessage("Server Error", 10000);
}
});
在测试的平台中,报告了服务器端错误,但随后没有进一步的操作;通过每两秒钟重试一次连接来报告和管理连接错误
因此,该代码是有效的
无论如何,我不喜欢的是假设err.getError()!=null
对于连接错误为true,对于服务器端错误为false。经过几次测试,我得出了这个假设,但我在任何地方都没有找到记录
因此,我的问题是:
谢谢也许我们应该有一个子类NetworkEvent来表示连接问题。现在我还不知道有更好的方法,也许我们应该有一个子类NetworkEvent来表示连接问题。现在我还不知道有更好的方法