Hallo,
ich schreibe gerade an einem API-Client.
Ich bekomme Daten per JSON und möchte diese dann in einer Tabelle ausgeben.
Das größte Problem daran ist das es mehrere API Methoden abdecken muss.
Manche liefern 5 Felder zurück und manche bis 15 Felder.
Ich möchte die Tabelle dynamisch befüllen.
Die Spaltenüberschriften bekomme ich gesetzt und ich sehe auch das die Tabelle die Daten eigentlich haben müsste, da der Scrollbalken kleiner wird und somit ersichtlich ist das es mehrere Zeilen geben muss, aber die Daten werden einfach nicht angezeigt.
Die einzelnen Felder ist leider danach einfach nicht befüllt.
Vielen dank für eure Hilfe.
ich schreibe gerade an einem API-Client.
Ich bekomme Daten per JSON und möchte diese dann in einer Tabelle ausgeben.
Das größte Problem daran ist das es mehrere API Methoden abdecken muss.
Manche liefern 5 Felder zurück und manche bis 15 Felder.
Ich möchte die Tabelle dynamisch befüllen.
Die Spaltenüberschriften bekomme ich gesetzt und ich sehe auch das die Tabelle die Daten eigentlich haben müsste, da der Scrollbalken kleiner wird und somit ersichtlich ist das es mehrere Zeilen geben muss, aber die Daten werden einfach nicht angezeigt.
Java:
private TableView table = new TableView();
private String apiCall( String domain, String publicHash, String privateHash ) {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpget = new HttpPost(domain);
String secret = privateHash;
httpget.addHeader("Accept", "application/json");
httpget.addHeader("Content-Type", "application/json");
httpget.addHeader("Public", publicHash);
ApiSecurity privateKey = new ApiSecurity();
privateKey.setPrivateKey(privateHash, secret);
httpget.addHeader("Hash", privateKey.getPrivateKey());
StringEntity xmlEntity = null;
try {
xmlEntity = new StringEntity(secret);
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
httpget.setEntity(xmlEntity);
httpget.addHeader("X-HTTP-Method-Override", "GET");
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpget);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader rd = null;
try {
rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
} catch (UnsupportedOperationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//JSON OBJECT
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
StringBuffer result = new StringBuffer();
String responseLine = "";
String[] lines = null;
int indexLines = 0;
TableColumn tableCol = null;
Map<String, TableColumn> tableCols = new HashMap<String, TableColumn>();
ObservableList<String> apiCallData = FXCollections.observableArrayList();
try {
//get each line from response! Convert to a POJO, create TableView
while ((responseLine = rd.readLine()) != null) {
lines = responseLine.replace("[", "").replace("]", "").split("(?=\\{)");
//lines = responseLine.split("(?=\\{)");
for( String line:lines ) {
ObservableList<String> row = FXCollections.observableArrayList();
Map<String, String> map = mapper.readValue(line, new TypeReference<Map<String,String>>(){});
for (Entry<String, String> entry : map.entrySet())
{
if( indexLines == 0 ) {
tableCol = new TableColumn(entry.getKey());
tableCols.put(entry.getKey(), tableCol);
this.table.getColumns().add(tableCol);
}
row.add(entry.getValue().toString());
//System.out.println(entry.getKey() + " => " + entry.getValue());
}
apiCallData.add(row.toString());
result.append(indexLines + ": " + line+"\n");
indexLines++;
}
System.out.println(apiCallData);
}
this.table.getItems().addAll(apiCallData);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result.toString();
}
Vielen dank für eure Hilfe.