Codenameone:网络异常发生时如何停止XFClient findAndWait请求,以便调用线程可以继续进行?

问题描述 投票:1回答:1

我的CN1应用程序使用XFClient与运行Xataface的服务器上的mySQL数据库进行通信。计时器线程调用XFClient的findAndWait方法,然后在重复之前睡眠1秒。它可以在99%以上的时间内正常运行,但是有时应用程序遇到网络问题(错误的网关,ConnectionExceptions,SocketTimeOutException等),并停止与服务器通信,因为findAndWait会始终等待,尽管有异常。发生异常时,findAndWait是否可以停止等待?

这是我到目前为止所尝试的:

  1. 包含错误。这样可以避免向用户显示错误消息但是findAndWait一直在等待
  2. Request.setTimeout(5000)在5秒后踢出(基于SocketTimeoutException in CodeNameOne build on Android device)。没有效果。 findAndWait一直在等待。在NetworkManager和请求级别对此进行了尝试。
  3. 在NetworkManager的handleException中,在下面添加了代码(基于https://github.com/codenameone/CodenameOne/issues/733)。它编译并运行,但是findAndWait一直在等待。

        NetworkManager.getInstance().addErrorListener(new ActionListener() {
    
            @Override
            public void actionPerformed(ActionEvent evt) {
                System.out.println("got a network error.  will kill the connect request and consume it.");
                if (theXFClient.getcRMP() != null) {
                NetworkManager.getInstance().killAndWait(theXFClient.getcRMP());
                }
                evt.consume();
            }
        });
    

我正在模拟器上运行此程序,启动应用程序,然后通过在模拟器菜单中禁用网络连接来触发问题。我希望定时器线程在我重新打开网络连接后仍能继续运行,但仍然停滞。

BTW-当应用程序通过模拟器菜单(和实际设备)暂停并恢复运行时,计时器将从上次停止的地方开始计时。希望我们能找到一种方法来解决网络故障。

Thx,迈克

codenameone
1个回答
1
投票

我刚刚添加了可以在XFClient类和XFQuery类上设置的超时和读取超时支持。如果特定查询的XFClient和XFQuery都指定了超时,则XFQuery超时将优先。

此更新将很快在Codename One设置中,但是您现在可以直接从here下载此新版本。>

© www.soinside.com 2019 - 2024. All rights reserved.