本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
网络与 HTTP
又是一个坦诚的页面:框架不提供高层 HTTP 客户端(没有向应用暴露符合人体工学的
Http.get())。你使用 java.net 或某个库(OkHttp 已在 classpath 中,被地图内部使用)。
强制性规则
在绘制线程之外发起请求,并用 Component.onUI(...) 回来操作 UI(见
后台工作)。
下载字节 —— Utils.getRemoteFile(url)
用于下载某个 URL 内容的快捷方式:
new Thread(() -> {
byte[] dados = Utils.getRemoteFile("https://api.exemplo.com/dados"); // 出错或在 WebGL 中时为 null
if (dados == null) { Component.onUI(() -> Hint.show("Falha na rede", 2000)); return; }
String corpo = new String(dados);
Component.onUI(() -> mostrar(corpo));
}).start();
⚠️
getRemoteFile在 HTTP 错误、异常以及在 WebGL/TeaVM 中都会返回null—— 请始终检查。
用 Jackson(不是 Gson)处理 JSON
项目的默认选择是 Jackson(com.fasterxml.jackson.databind.ObjectMapper):
ObjectMapper mapper = new ObjectMapper();
new Thread(() -> {
try {
byte[] json = Utils.getRemoteFile("https://api.exemplo.com/clientes");
if (json == null) return;
List<Cliente> clientes = mapper.readValue(json, new TypeReference<List<Cliente>>(){});
Component.onUI(() -> lista.setItems(clientes));
} catch (Exception e) { Debug.log("parse: " + e); }
}).start();
用 java.net 进行 GET/POST
当你需要更多控制(headers、POST)时,直接使用 HttpURLConnection/OkHttp —— 始终在
后台线程中,结果用 onUI(...) 返回。
⚠️ 在 WebGL/TeaVM 中的限制
在 Web 目标上,HTTP 调用有限制(CORS、没有直接 socket),且 getRemoteFile 返回
null。请处理这种情况,或在 Web 上禁用该功能(见 platforms)。
最佳实践
- 绝不在绘制线程上进行网络操作 —— UI 会冻结。
- 用 Jackson,不用 Gson(与项目其余部分保持一致)。
- 对每个响应都检查
null/异常;通过Hint/Alert向用户显示错误。
常见错误
- 寻找
Http.get()/现成客户端 —— 不存在;请用java.net/OkHttp。 - 忽略
getRemoteFile在 WebGL 中为null。 - 直接在网络线程上解析/操作 UI(没有
onUI)。
另见
这个页面有帮助吗?感谢你的反馈!