【问题标题】:I can't catch an error from a Rest ful when sending a mail发送邮件时,我无法从 Rest ful 中捕获错误
【发布时间】:2021-12-25 21:36:36
【问题描述】:

我有一个使用 WS 发送邮件的方法。如果电子邮件帐户是真实的,它可以正常工作,但如果电子邮件帐户不是真实的,它会通过 getResponseCode 返回 500 错误。 不好的是,它会向我显示一个带有指示错误的窗口。

在运行它之前,请确保运行以下方法:

ConnectionRequest.setHandleErrorCodesInGlobalErrorHandler(false);

我的方法:

public static Response imprimePedido(Long pedidoId) {
    String serverPost = "";
    Response<String> r = null;
    if (Preferences.get("correo_prueba", null) != null) {
        serverPost = SERVER_URL + "blank_factura_impresion_pdf/blank_factura_impresion_pdf.php?pedidoId=" + Long.toString(pedidoId) + "&correo_prueba=" + Preferences.get("correo_prueba", null);
    } else {
        serverPost = SERVER_URL + "blank_factura_impresion_pdf/blank_factura_impresion_pdf.php?pedidoId=" + Long.toString(pedidoId);
    }
    try {
        r = Rest.post(serverPost).
                header("token", UsuarioService.getToken()).
                jsonContent().getAsString();
        if (r.getResponseCode() != 200) {
            System.out.println("No pude enviar correo");
            log("Error: " + r.getResponseErrorMessage());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return r;
}

窗口错误:

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    ConnectionRequest.setHandleErrorCodesInGlobalErrorHandler(false); 仅适用于依赖于 Codename One 旧版本的不当行为的旧应用程序。所以,我建议你删除它。这个方法的目的记录在这里:https://www.codenameone.com/blog/terse-table-radar-chart-networking.html#_networking_enhancements

    我想你的问题的原因是默认的网络错误监听器,它通常在 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);
            });
    

    我建议您使用更好的错误管理来自定义该代码,就像我在这个答案中所说的那样:https://stackoverflow.com/a/68773491

    然而,这还不是全部。我在发送电子邮件时遇到了与您类似的问题。 500 错误不会让用户知道他们拼错了电子邮件地址。因此,我修改了服务器端代码以返回 200 代码,但响应消息不同,例如“正确发送”或“无效电子邮件地址”。这样,应用程序可以正确地通知用户并区分此类错误和其他错误。

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 2018-01-18
      • 2016-08-24
      • 1970-01-01
      • 2015-03-13
      • 2017-09-26
      • 2022-01-21
      • 1970-01-01
      • 2017-04-30
      相关资源
      最近更新 更多