TableView Daten werden nicht ausgegeben

java666

Aktives Mitglied
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.


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();
    }
Die einzelnen Felder ist leider danach einfach nicht befüllt.

Vielen dank für eure Hilfe.
 
Nein noch nicht. An solche Tools muss ich erst einmal denken. Komme aus der PHP Ecke. Da macht man viel mit einfachen ausgaben.
Reicht der Eclipse Debugger?
 
Mir ist nicht ganz klar wie ich die setCellValueFactory in einer Schleife verwenden kann/soll.
Ich kann ja nicht immer tableCol.setCellValueFactory() machen?
Oder ist soetwas möglich?
 
Jetzt gerade schon. Kommt aber auch nix rum dabei:
tableCol.setCellValueFactory(new PropertyValueFactory<>(entry.getValue()));

Irgendwie muss ich es ja dann auch noch der ObservableList zuweisen?
 
ich selbst hab columns noch nie dynamisch in einer schleife erstellt.
ich müsste selbst schauen wie es funktioniert.
nur ohne setzten der value wird es nicht funken.

hast du schon mal versucht die Cell zu überschreiben?
 

Neue Themen


Zurück
Oben