使用代号一管理 http 错误代码

Manage http error codes with Codename One

我写了:

private RequestBuilder getPostRequest(String api) {
        return Rest.post(url + api)
                .jsonContent()
                .header("wsc-access-key", WowzaAccount.getAccessKey())
                .header("wsc-api-key", WowzaAccount.getRestKey());
    }
getPostRequest("live_streams").body(json).fetchAsJsonMap(new OnComplete<Response<Map>>() {
            @Override
            public void completed(Response<Map> v) {
                if (v.getResponseCode() == 201) {
                    // success
                    Map<String, Object> response = v.getResponseData();
                    name = (String) response.get("name");
                    id = (String) response.get("id");
                    connection_code = (String) response.get("connection_code");
                    Log.p("WowzaLiveStream -> (Code 201) Successfully created live stream with name " + name, Log.DEBUG);
                    onComplete.completed(instance);
                } else if (v.getResponseCode() == 401) {
                    Log.p("WowzaLiveStream -> (Code 401) Unauthorized, failed to create live stream with name " + params.name.get(), Log.DEBUG);
                    onFail.run();
                } else if (v.getResponseCode() == 422) {
                    Log.p("WowzaLiveStream -> (Code 422) Unprocessable Entity, failed to create live stream with name " + params.name.get(), Log.DEBUG);
                    onFail.run();
                } else {
                    Log.p("WowzaLiveStream -> Unknow response with code " + v.getResponseCode() + ", failed to create live stream with name " + params.name.get(), Log.DEBUG);
                    onFail.run();
                }
            }
        });

问题是当我收到 422 响应代码时,我的 onFail 回调没有被调用。而是出现 Dialog。我想这个对话框是由 init() 中的默认 addNetworkErrorListener 代码调用的。但是...我不能(也不想)禁用默认的 addNetworkErrorListener 代码,因为我正在编写一个新的 CN1Lib。相反,我需要在这种情况下,并且仅在这种情况下,不应调用网络错误侦听器,而我编写的失败回调应该是 运行.

在这种情况下,更合适的做法是仅在 Internet 连接丢失时调用网络错误侦听器。

谢谢

您需要明确捕获错误代码回调,因为回调的格式可能与主回调的格式不同 JSON:

private RequestBuilder getPostRequest(String api) {
    return Rest.post(url + api)
            .jsonContent()
            .header("wsc-access-key", WowzaAccount.getAccessKey())
            .header("wsc-api-key", WowzaAccount.getRestKey())
            .onErrorCodeJSON(map -> { 
               // process error response
            });

}