我遇到了連接錯誤時應用程序行爲方式的問題。Codename One中的連接錯誤時的錯誤行爲ConnectionRequest
當用戶填寫用戶名/密碼的字段我做了以下內容:
public static AuthenticationResponse authenticate (String username, String password){
return WebServiceCaller.authenticate(username, password, ServiceDefinitions.getAuthenticationServiceDefintion());
}
在Web服務調用者,我有:
public static AuthenticationResponse authenticate(String username, String password, ServiceDefinition definition) {
AuthenticationService authenticationService = new AuthenticationService(username, password);
NetworkManager.getInstance().setTimeout(10000); // change the default timeout of network.
service.setTimeout(10000); // change the default timeout of request connection
service.setUrl(definition.getUrl());
service.setContentType(definition.getContentType());
service.setPost(definition.isPost());
InfiniteProgress ip = new InfiniteProgress();
Dialog dlg = ip.showInifiniteBlocking();
service.setDisposeOnCompletion(dlg);
NetworkManager.getInstance().addToQueueAndWait(authenticationService);
return authenticationService.getModelResponse();
}
我也推翻了handleIoException
和handleException
方法,使而不是顯示通用對話框,我用消息填充響應對象,該消息顯示在GUI中。
發生錯誤的事情是上述方法的返回部分在錯誤管理方法完成之前調用。
所以基本上它應該是call->wait->errorManagement
complete->return
而是我得到call->wait->errorManagement->return->errorManagemetnComplete
。
也許我錯過了網絡管理器工作的方式,它是多線程操作,如果您有更詳細的文檔,我很樂意閱讀它。
我在重寫的方法做的是如下所示:
/** Handles IOException thrown when performing a network operation */
@Override
protected void handleIOException(IOException err) {
Log.p("Handle IOException, when network is down! ");
manageGenericErrors();
}
@Override
public void manageGenericErrors() {
response.setIsSuccessful(false);
response.setResponseMessage("Service not available」);
}