Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Worldmen
3 / 3 / 3
Регистрация: 31.08.2013
Сообщений: 230
Завершенные тесты: 1
#1

При выводе ArrayList<T> выводит последние элементы

03.11.2015, 00:00. Просмотров 858. Ответов 3
Метки нет (Все метки)

Класс Words:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
public class Words {
    public int Id;
    public String WordEnglish;
    public String WordRussian;
    public String Transcription;
    public int Category;
}

Метод заполнения списка ArrayList<Words>:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public ArrayList<Words> GetAllWords(SQLiteDatabase db){
        ArrayList <Words> allWords = new ArrayList<>();
        Words w = new Words();
        Cursor cur = db.query(tabWords, null, null, null, null, null, null);
        while (cur.moveToNext()){
            w.Id = cur.getInt(cur.getColumnIndex("_id"));
            w.WordEnglish = cur.getString(cur.getColumnIndex("wordEng"));
            w.WordRussian = cur.getString( cur.getColumnIndex("wordRus"));
            w.Transcription = cur.getString( cur.getColumnIndex("transcript"));
            w.Category = cur.getInt(cur.getColumnIndex("category"));
 
            allWords.add( w );
        }
 
        cur.close();
        return allWords;
    }

Метод создания таблицы в активити (TableAllWords):
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   public void TableAllWords(String eng, String rus, String trn){   
        TextView fEng = new TextView(getApplicationContext());
        fEng.setPadding(2, 1, 5, 0);    
        fEng.setText(eng);
 
        TextView fRus = new TextView(getApplicationContext());
        fRus.setPadding(2, 1, 5, 0);        
        fRus.setText(rus);
 
        TextView fTrn = new TextView(getApplicationContext());
        fTrn.setPadding(2, 1, 5, 0);        
        fTrn.setText(trn);
 
        TableRow row = new TableRow(getApplicationContext());
        row.addView(fEng);  
        row.addView(fRus);  
        row.addView(fTrn);  
 
        tableWords.addView(row);
    }

Так заполняю таблицу:
Java
1
2
3
4
ArrayList<Words> w = dbHelper.GetAllWords(db);
for(Words item : w){
      TableAllWords(item.WordEnglish,item.WordRussian,item.Transcription);
}
В базе данных в таблице у меня 7 записей, в таблице формы андроида выводит 7 раз последнюю запись.
Почему?
И если так выводить, то же самое получается:
Java
1
2
3
for (int i = 0; i<w.size();i++){
    TableAllWords(w.get(i).WordEnglish,w.get(i).WordRussian,w.get(i).Transcription);
 }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2015, 00:00
Ответы с готовыми решениями:

Не получается добавить элементы одного ArrayList в другой
for (i=1;i&lt;=5;i++){ Que.add(arrayList.get(i)); ...

Как поместить в preferences arrayList типа: arraylist<Class>
Как поместить в preferences arrayList типа: arraylist&lt;Class&gt; Class содержит...

Ошибка при заполнении ArrayList из массива
Добрый Товарищи! делаю так: // создаем адаптер ...

Задержка при выводе картинки в button?
Задержка при выводе картинки в button, не получается... Цикл выводит, 5...

При выводе данных из DataSet в Excel не выводятся последние 3 записи
Здравствуйте! Я понимаю, что вопрос избитый. Но вижу без вашей помощи проблему...

3
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 670
03.11.2015, 00:26 #2
Worldmen, попробуй так написать метод getAllWords

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public ArrayList<Words> getAllWords(SQLiteDatabase db){
        ArrayList <Words> allWords = new ArrayList<>();
        Words w = new Words();
        Cursor c = db.query(tabWords, null, null, null, null, null, null);
        
        if (c != null) {
            if (c.moveToFirst()) {
                do {
                     w.Id = c.getInt(c.getColumnIndex("_id"));
                     w.WordEnglish = c.getString(c.getColumnIndex("wordEng"));
                     w.WordRussian = c.getString( c.getColumnIndex("wordRus"));
                     w.Transcription = c.getString( c.getColumnIndex("transcript"));
                     w.Category = c.getInt(c.getColumnIndex("category"));
          
                     allWords.add( w );
                } while (c.moveToNext());
            }
        }
 
        c.close();
        return allWords;
    }
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
03.11.2015, 10:54 #3
Лучший ответ Сообщение было отмечено Worldmen как решение

Решение

Mikalai, Вы чуть ошиблись. В цикле надо каждый раз создавать
Java
1
w = new Words();
иначе будет одна и та же ссылка лежать в ArrayList
2
Mikalai
03.11.2015, 11:58     При выводе ArrayList<T> выводит последние элементы
  #4

Не по теме:

YuraAAA, согласен. Недочёт. Спишем это на позднее время )))

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 11:58
Привет! Вот еще темы с ответами:

При выводе числа с плавающей запятой теряются последние цифры
Доброго времени суток! Мне дано число 0,1025390625. double отрезает конец и...

При выводе на печать полученной строки некорректно отображаются последние символы
Написал функция, боюсь не самую изящную, но не в этом дело. Суть функции:...

При выводе массива, выводит мусор
Програмка генератор паролей! #include&lt;iostream&gt; #include&lt;time.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru