Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
#1

ListView - как добавлять данные из БД в начало списка? - Android

23.12.2014, 10:05. Просмотров 1668. Ответов 52
Метки нет (Все метки)

Здравствуйте. Подскажите, пожалуйста, как сделать, чтобы при добавлении данных в БД - в ListView они попадали в начало списка.
Использую SimpleCursorAdapter...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2014, 10:05     ListView - как добавлять данные из БД в начало списка?
Посмотрите здесь:

Android Как заставить LisView забивать элементы в начало списка?
Как правильно обновить данные для списка при изменении данных в другом фрагменте? Android
Android Как в listview добавлять множество строк?
Android Как в ListView добавлять элементы
Как распарсить страницу и записать данные в ListView? Android
Прокрутка ListView в начало при обновлении EditText Android
Android Как обратиться к элементу (button) внутри пункта списка (ListView)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:15     ListView - как добавлять данные из БД в начало списка? #2
Ну, как вариант, в запросе на выборку сортируйте в курсор адаптера в обратном порядке, например, по rowid (или ваш походящий ключ) - что-то типа
SQL
1
SELECT * FROM yourtable ORDER BY rowid DESC
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 10:23  [ТС]     ListView - как добавлять данные из БД в начало списка? #3
У меня вот такой код добавления данных:

Java
1
2
3
4
5
6
7
8
9
// добавить запись в DB_TABLE
    public void addRec(String dat, String cat, String debt, String kol) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_DAT, dat);
        cv.put(COLUMN_CAT, cat);
        cv.put(COLUMN_SUM, debt);
        cv.put(COLUMN_KOL, kol);
        mDB.insert(DB_TABLE, null, cv);
    }
Добавлено через 1 минуту
Это здесь мне надо что-то править?

Добавлено через 2 минуты
Или при получении данных из таблицы?

Java
1
2
3
4
// получить все данные из таблицы DB_TABLE
    public Cursor getAllData() {
        return mDB.query(DB_TABLE, null, null, null, null, null, null);
    }
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:33     ListView - как добавлять данные из БД в начало списка? #4
Java
1
return mDB.rawquery("SELECT * FROM DB_TABLE ORDER BY rowid DESC", null);
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 10:45  [ТС]     ListView - как добавлять данные из БД в начало списка? #5
Ошибку выдает в этой строке при запуске приложения... (((
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:48     ListView - как добавлять данные из БД в начало списка? #6
Java
1
return mDB.rawquery("SELECT rowid _id, * FROM DB_TABLE ORDER BY _id DESC", null);
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 10:53  [ТС]     ListView - как добавлять данные из БД в начало списка? #7
Снова - там же... (((
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:54     ListView - как добавлять данные из БД в начало списка? #8
Лечу по фотографии
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 10:55  [ТС]     ListView - как добавлять данные из БД в начало списка? #9
Переведи ))))
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 11:27     ListView - как добавлять данные из БД в начало списка? #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Java
1
return mDB.rawquery("SELECT rowid _id, * FROM "+ DB_TABLE +" ORDER BY _id DESC", null);
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 11:28  [ТС]     ListView - как добавлять данные из БД в начало списка? #11
Вот класс БД

Кликните здесь для просмотра всего текста


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
private static final String DB_NAME = "myincome";
    private static final int DB_VERSION = 1;
 
    private static final String DB_TABLE = "mytab";
  
 
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_DAT = "dat";
    public static final String COLUMN_CAT = "cat";
    public static final String COLUMN_SUM = "debt";
    public static final String COLUMN_KOL = "kol";
 
    private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_DAT + " text, " +
                    COLUMN_CAT + " text, " +
                    COLUMN_SUM + " text, " +
                    COLUMN_KOL + " text" +
                    ");";
 
  
    private final Context mCtx;
 
 
    private DBHelper mDBHelper;
    private SQLiteDatabase mDB;
 
    public DB(Context ctx) {
        mCtx = ctx;
    }
 
    // открыть подключение
    public void open() {
        mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
        mDB = mDBHelper.getWritableDatabase();
    }
 
    // закрыть подключение
    public void close() {
        if (mDBHelper != null) mDBHelper.close();
    }
 
    // получить все данные из таблицы DB_TABLE
    public Cursor getAllData() {
     //   return mDB.query(DB_TABLE, null, null, null, null, null, null); // - Было так.... запускалось...
 
    return mDB.rawQuery("SELECT rowid _id, * FROM DB_TABLE ORDER BY _id DESC", null); // А так  - ошибка (в этой строке и в классе, где используется этот метод) при старте приложения
 
    }
 
   
    // добавить запись в DB_TABLE
    public void addRec(String dat, String cat, String debt, String kol) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_DAT, dat);
        cv.put(COLUMN_CAT, cat);
        cv.put(COLUMN_SUM, debt);
        cv.put(COLUMN_KOL, kol);
        mDB.insert(DB_TABLE, null, cv);
    }
 
   
    // обновить запись в DB_TABLE
    public void updCod(long id, String dat, String cat, String debt, String kol) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_DAT, dat);
        cv.put(COLUMN_CAT, cat);
        cv.put(COLUMN_SUM, debt);
        cv.put(COLUMN_KOL, kol);
        mDB.update(DB_TABLE, cv, COLUMN_ID + " = " + id, null);
    }
 
   
    // установить курсор на запись с введенным ID
    public Cursor select(long id) {
 
    return mDB.query(true, DB_TABLE, new String[] { COLUMN_ID, COLUMN_DAT, COLUMN_CAT, COLUMN_SUM, COLUMN_KOL },
              COLUMN_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);
    }
  
 
    // удалить запись из DB_TABLE
    public void delRec(long id) {
        mDB.delete(DB_TABLE, COLUMN_ID + " = " + id, null);
    }
 
  
    // удалить все записи из DB_TABLE
    public void deleteAll() {
        mDB.delete(DB_TABLE, null, null);
    }
 
   
 
    // класс по созданию и управлению БД
    private class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context, String name, CursorFactory factory,
                        int version) {
            super(context, name, factory, version);
        }
 
        // создаем и заполняем БД
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);
     
 
            ContentValues cv = new ContentValues();
            for (int i = 1; i < 2; i++) {
                cv.put(COLUMN_DAT, "1.12.2014");
                cv.put(COLUMN_CAT, "Взносы");
                cv.put(COLUMN_SUM, "100");
                cv.put(COLUMN_KOL, "2");
 
                db.insert(DB_TABLE, null, cv);
 
            }
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
}
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 11:34     ListView - как добавлять данные из БД в начало списка? #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
А говоришь не понимаешь...

Java
1
return mDB.rawquery("SELECT * FROM "+ DB_TABLE +" ORDER BY "+ COLUMN_ID+" DESC", null);
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 11:44  [ТС]     ListView - как добавлять данные из БД в начало списка? #13
Спасибочки... ))) Пашет!!! Плюсик отправил )

Добавлено через 55 секунд
А таким же образом можно сортировать и по дате, да?

Добавлено через 1 минуту
Цитата Сообщение от Armagedo Посмотреть сообщение
Код Java(TM) 2 Platform Standard Edition 5.0
1
return mDB.rawquery("SELECT rowid _id, * FROM "+ DB_TABLE +" ORDER BY _id DESC", null);

Вот это заработало... то поздно сообщение дошло... )

Добавлено через 5 минут
И второй работает ))
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 11:55     ListView - как добавлять данные из БД в начало списка? #14
Используй второй вариант
Java
1
return mDB.rawquery("SELECT * FROM "+ DB_TABLE +" ORDER BY "+ COLUMN_ID+" DESC", null);
Я ж не знал, что у тебя есть ключ-счетчик.
В первом варианте используется автоматически вводимое SQLite поле rowid (естественно, если при создании таблицы не было выбрано опцию WITHOUT ROWID).
И так совпало, что в выборке это поле "обзывается" _id, аналогично существующему у тебя полю, которое тоже отбирается в силу "*".
Что там в результатае в курсоре в таком случае - нужно смотреть...

А таким же образом можно сортировать и по дате, да?
Та по чем хочешь, в принципе
Java
1
return mDB.rawquery("SELECT * FROM "+ DB_TABLE +" ORDER BY "+ COLUMN_DAT+" DESC", null);
Лучше читай первоисточник по SQLite и запросам
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 12:36  [ТС]     ListView - как добавлять данные из БД в начало списка? #15
Только начал конкретно разбираться в сортировках и выборка... Спасибо еще раз за помощь!! ) теперь легче будет дальше все понять ))

По дате попытался так же сделать, но не сортирует, чего-то... добавляет в конец листа...
поле с датой изменил на COLUMN_DAT + " date, " +
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
23.12.2014, 12:46     ListView - как добавлять данные из БД в начало списка? #16
А чем сортировка по id не устраивает? Дата то сегодняшняя.
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 12:52  [ТС]     ListView - как добавлять данные из БД в начало списка? #17
В итоге мне нужно сортировать по дате...

Добавлено через 31 секунду
Дата может меняться...
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 12:53     ListView - как добавлять данные из БД в начало списка? #18
Seivan,
поле с датой изменил на COLUMN_DAT + " date, " +
это какой-то ненужный костыль, ИМХО, тем более непонятно, как это вообще отрабатывается - ведь у тебя нет поля date...
Seivan
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 97
23.12.2014, 12:55  [ТС]     ListView - как добавлять данные из БД в начало списка? #19
Цитата Сообщение от Armagedo Посмотреть сообщение
Seivan,
поле с датой изменил на COLUMN_DAT + " date, " +
это какой-то ненужный костыль, ИМХО...

Это создание базы данных и таблицы с полями


Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_DAT + " date, " +
                    COLUMN_CAT + " text, " +
                    COLUMN_SUM + " text, " +
                    COLUMN_KOL + " text" +
                    ");";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2014, 13:09     ListView - как добавлять данные из БД в начало списка?
Еще ссылки по теме:

Как добавлять дополнительные данные Android
Элемент списка listView и БД SQLlite Android
Android Оформление элемента списка ListView
Android Как добавлять записи в начало списка и ограничивать их количество?
Android Как записывать данные из SQLite в ListView

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

Или воспользуйтесь поиском по форуму:
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 13:09     ListView - как добавлять данные из БД в начало списка? #20
Это тип "datE", а поле у тебя "dat".
Отсюда и вопрос возник.

Кстати, SQLite не умеет хранить типы date/time в обычном понимании, равно, как и boolean...
Так что, что там и в каком виде хранится у тебя в этом поле, а значит и правила сравнения - зависит...
1.2 Date and Time Datatype

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.

https://www.sqlite.org/datatype3.html
P.S. А, понял, что где откуда
Yandex
Объявления
23.12.2014, 13:09     ListView - как добавлять данные из БД в начало списка?
Ответ Создать тему
Опции темы

Текущее время: 00:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru