ho fatto qualche modifica.
adesso il json risulta così:
codice:
{
"data" : [ {
"nome" : "Dance",
"canzoni" : [ ]
}, {
"nome" : "Hardstyle",
"canzoni" : [ ]
}, {
"nome" : "Italiana",
"canzoni" : [ ]
}, {
"nome" : "ND",
"canzoni" : [ ]
}, {
"nome" : "Straniera",
"canzoni" : [ ]
} ]
}
più corretto, nel senso che almeno risulta un array, ma cmq vuoto.
questo il codice:
codice:
router.route("/").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
getClient()
.query("SELECT DISTINCT canzone_genere AS nome FROM canzoni ORDER BY canzone_genere")
.execute(ar -> {
RowSet<Row> rowSet = ar.result();
List<Genere> list = new ArrayList<>();
for (Row row : rowSet) {
List<Canzone> list2 = new ArrayList<>();
JsonObject jsonObject = row.toJson();
Genere genere = new Genere();
genere.setNome(jsonObject.getString("nome"));
String query = String.format("SELECT canzone_titolo AS titolo FROM canzoni WHERE canzone_genere = '%s' ORDER BY canzone_titolo", genere.getNome());
getClient()
.query(query)
.execute(ar2 -> {
RowSet<Row> rowSet2 = ar2.result();
for (Row row2 : rowSet2) {
JsonObject jsonObject2 = row2.toJson();
Canzone canzone = new Canzone();
canzone.setTitolo(jsonObject2.getString("titolo"));
list2.add(canzone);
}
// OK --> STAMPA LE CANZONI
for (Canzone c : list2) {
System.out.println(c.getTitolo());
}
});
// KO --> NON STAMPA LE CANZONI
for (Canzone c : list2) {
System.out.println(c.getTitolo());
}
genere.setCanzoni(list2);
list.add(genere);
}
JsonObject jsonObject = new JsonObject();
jsonObject.put("data", list);
response
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(jsonObject));
});
});
vi ho messo due for.
come vedete il secondo non stampa nulla, come si svuotasse appena uscito dall'execute.