Вывод ArrayList - PullRequest
       1

Вывод ArrayList

0 голосов
/ 07 января 2019
ArrayList<String> list_apps = new ArrayList<String>();
    String html = null;

    try
    {
        String username = null;
        String appname= null;
        String ip = null;
        String token = null;

        //connessione
        sqlite.setDbPath(dbPath);
        con = sqlite.connect();
        String query="SELECT Username, AppName, Ip, Token FROM Apps";
        ResultSet rs = con.createStatement().executeQuery(query);
        //

        while(rs.next())
        {
            username = rs.getString("Username");
            appname = rs.getString("AppName");
            ip = rs.getString("Ip");
            token = rs.getString("Token");
            list_apps.add(username);
            list_apps.add(appname);
            list_apps.add(ip);
            list_apps.add(token);
            System.out.println(username + " "+ appname + " " + ip+ " " + token);
        }


        html="<html>" + "<body>" + "<table border ='1'>" +
                "<tr>" + 
                "<td>Username</td>" +
                "<td>App Name</td>" +
                "<td>Ip</td>" +
                "<td>Token</td>" +
                "</tr>";

        for(int i = 0; i<list_apps.size(); i++)
        {
            html+="<td>"+list_apps.get(0).toString() +"</td>";//username
            html+="<td>"+list_apps.get(1).toString() +"</td>";//appname
            html+="<td>"+list_apps.get(2).toString() +"</td>";//ip
            html+="<td>"+list_apps.get(3).toString() +"</td>";//token
            html+="<tr>";
        }
        html+="</table>"+"</body>"+"</html>";

        //System.out.println(html);
        //System.out.println(list_apps.get(0).toString());

    }

У меня проблема с выводом html-таблицы с кодом Java. В моей базе данных есть только два элемента, но вывод html - это таблица из 10 строк первой строки в моей базе данных.

Я не знаю, правильна ли утилита arraylist, я должен распечатать username, appname, ip, token из встроенной базы данных SQLite:

    Username    App Name    Ip  Token
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44

Вывод - только первая строка таблицы о повторении базы данных

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Сначала вы должны создать класс с именем App, который содержит данные для одного приложения. Это значительно облегчит вам задачу.

class App {
    private final String username;
    private final String appname;
    private final String ip;
    private final String token;

    // Add constructor, getters, toString, equals, hashCode and so on.
}

Теперь, когда вы читаете данные из базы данных, создайте экземпляры этого класса и поместите их в список.

List<App> list_apps = new ArrayList<>();

while(rs.next()) {
    App app = new App(
        rs.getString("Username"),
        rs.getString("AppName"),
        rs.getString("Ip"),
        rs.getString("Token")
    );

    list_apps.add(app);
    System.out.println(app);
}

Теперь, когда вы генерируете html, вы можете сделать это:

for(App app : list_apps) {
    html += "<td>" + app.getUsername() + "</td>";
    html += "<td>" + app.getAppName() + "</td>";
    html += "<td>" + app.getIp() + "</td>";
    html += "<td>" + app.getToken() + "</td>";
    html += "<tr>";
}
0 голосов
/ 07 января 2019

Здесь:

for(int i = 0; i<list_apps.size(); i++)
    {
        html+="<td>"+list_apps.get(0).toString() +"</td>";//username
        html+="<td>"+list_apps.get(1).toString() +"</td>";//appname
        html+="<td>"+list_apps.get(2).toString() +"</td>";//ip
        html+="<td>"+list_apps.get(3).toString() +"</td>";//token
        html+="<tr>";
    }

Что вы на самом деле сделали: добавив свои «строки» с 4 столбцами в ваш список. Итак, вы хотите, чтобы ваш цикл for работал в «чанках» из 4 элементов, например:

for(int i = 0; i<list_apps.size(); i+=4)
    {
        html+="<td>"+list_apps.get(i).toString() +"</td>";//username
        html+="<td>"+list_apps.get(i+1).toString() +"</td>";//appname
        html+="<td>"+list_apps.get(i+2).toString() +"</td>";//ip
        html+="<td>"+list_apps.get(i+3).toString() +"</td>";//token
        html+="<tr>";
    }

Кроме того, «реальным» ответом будет: создать класс, который представляет эти данные, например, наличие полей-членов username, appname, ip, token. Затем создайте один объект для каждой строки и добавьте этот единственный объект в свой список. Затем повторите этот список и просто печатайте один объект за раз!

Ваш подход заключается в том, чтобы "развернуть" все ваши данные в единый список, и это, как правило, не очень хорошая идея.

0 голосов
/ 07 января 2019

Еще раз взглянем на ваш код. В вашем цикле:

 for(int i = 0; i<list_apps.size(); i++)

Вы ссылаетесь на list_apps, где вы ранее делали следующее: list_apps.add(username); list_apps.add(appname); list_apps.add(ip); list_apps.add(token);

Вы выводите список размером переменных, которые вы ввели. Вам нужно использовать другую систему подсчета.

p.s. таблица, которую вы выводите, имеет длину 8 строк (добавлено 4 переменные х 2 записи)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...