Rede e HTTP
Outra página honesta: o framework não traz um cliente HTTP de alto nível (nada de Http.get()
ergonômico exposto ao app). Você usa java.net ou uma lib (OkHttp já está no classpath, usada
internamente pelos mapas).
A regra obrigatória
Faça a requisição fora da paint thread e volte com Component.onUI(...) para tocar a UI (ver
Trabalho em background).
Baixar bytes — Utils.getRemoteFile(url)
Atalho para baixar o conteúdo de uma URL:
new Thread(() -> {
byte[] dados = Utils.getRemoteFile("https://api.exemplo.com/dados"); // null em erro OU em WebGL
if (dados == null) { Component.onUI(() -> Hint.show("Falha na rede", 2000)); return; }
String corpo = new String(dados);
Component.onUI(() -> mostrar(corpo));
}).start();
⚠️
getRemoteFileretornanullem erro HTTP, exceção e em WebGL/TeaVM — sempre cheque.
JSON com Jackson (não Gson)
O padrão do projeto é 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();
GET/POST com java.net
Quando precisar de controle (headers, POST), use HttpURLConnection/OkHttp diretamente — sempre numa
thread de fundo, resultado de volta com onUI(...).
⚠️ Limitações em WebGL/TeaVM
No alvo Web, as chamadas HTTP têm restrições (CORS, sem sockets diretos) e getRemoteFile retorna
null. Trate esse caso ou desabilite o recurso no Web (ver platforms).
Boas práticas
- Nunca faça rede na paint thread — a UI congela.
- Jackson, não Gson (consistência com o resto do projeto).
- Cheque
null/exceção em toda resposta; mostre erro ao usuário viaHint/Alert.
Erros comuns
- Procurar
Http.get()/cliente pronto — não existe; usejava.net/OkHttp. - Ignorar que
getRemoteFileénullem WebGL. - Parsear/tocar UI direto na thread de rede (sem
onUI).