codenameone - 使用 Codename One 管理 http 错误代码
问题描述
我写:
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
出现了一个。我想这个对话框是addNetworkErrorListener
由init()
. 但是...我不能(也不想)禁用默认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
});
}
推荐阅读
- javascript - 在 ChartJs 中绘制刻度时修改点样式
- ruby-on-rails - 如何将字符串转换为挖掘可读格式的导轨?
- javascript - 如何抽象 Javascript Promise 并保留 .then
- django - 从一个 SerializerMethodField 返回两个字段值
- android - 我正在使用 ViewModel Live 数据进行 UI 更新。我想使用 Retrofit 进行网络调用。我可以在服务(意图服务)中使用改造调用吗?
- azure - 创建应用服务托管证书说成功,但没有出现证书
- pine-script - 松脚本不工作。条件似乎不起作用
- javascript - 将多个 CCTV RTSP 流式传输到 Node.js 的最佳方法是什么
- html - 未捕获的 TypeError:Vue.use 不是函数
- ios - Mac Catalyst popover 设置/限制大小问题