首页 > 解决方案 > 当连接性较差时,CN1 上的请求超时是否有解决方法

问题描述

日志中出现以下错误。我在想这是服务器抛出的超时。但是在服务器上没有设置超时时间。所以我的问题是我们可以在 CN1 上添加一些东西来尝试在一段时间内完成请求(特别是当互联网连接很差时)并重新尝试可用的功能。请指教。

[网络线程] 58:51:51,888 - 请求超时。[网络线程] 58:51:51,898 - 异常:java.io.IOException - 请求超时。java.io.IOException at com_codename1_io_ConnectionRequest.performOperation:884 at com_codename1_io_NetworkManager_NetworkThread.run:325 at com_codename1_impl_CodenameOneThread.run:176 at java_lang_Thread.runImpl:153 [EDT] 58:51:52,3 - 异常:java.lang.IndexOutOfBoundsException - 0 out的:0 java.lang.IndexOutOfBoundsException at java_util_ArrayList.get:328 at .finishAppointment:2737 at _forms_ConfirmationForm.lambda$new$1:145 at forms_ConfirmationForm__Lambda_2。

请参阅随附的服务器通信代码。

 ConnectionRequest r = new ConnectionRequest(URL_PREFIX + appName + API_SUFFIX
                + "Verification/apt/" + apt, true) {
            @Override
            protected void readResponse(InputStream input) throws IOException {
                String s = Util.readToString(input);
                response.add(s);    
            }

            @Override
            protected void buildRequestBody(OutputStream os) throws IOException {
                String body = "{      \n"
                        + "   \"FinishTimeEpoch\":" + retrieveModifiedLongDuration(endTimeFinal) * 60000;
                if (startTimeFinal != -1) {
                    body += ",\n   \"StartTimeEpoch\":" + retrieveModifiedLongDuration(startTimeFinal) * 60000;
                } 
                body += "\n}";                
                if (shouldWriteUTFAsGetBytes()) {
                    os.write(body.getBytes("UTF-8"));
                } else {
                    OutputStreamWriter w = new OutputStreamWriter(os, "UTF-8");
                    w.write(body);
                }
            }
        };

        r.setHttpMethod("PUT");
        r.setContentType("application/json");
        r.setFailSilently(true);
        r.setReadResponseForErrors(true);
        NetworkManager.getInstance().addToQueueAndWait(r);

标签: codenameone

解决方案


这是一个连接超时,这意味着超时发生在连接到服务器之前。连接时间太长了。

您可以增加超时,但实际上减少它并重试更多可能会更好。您可以在连接请求本身或NetworkManager全局设置超时设置。见setTimeout


推荐阅读