Обратный порядок в ListView с использованием SimpleCursorAdapter и SQLite

Я заполняю ListView данными из моей базы данных SQLite, используя SimpleCursorAdapter. Данные в порядке, но последняя запись всегда вставляется внизу ListView, и я хочу, чтобы она была вверху.

Я уже нашел этот сообщение, но я не знаю, как импортировать его в мой проект. На данный момент мой SQL-запрос выглядит так:

public Cursor fetchAllProjects() {

  Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID,
    KEY_ROUTERIP, KEY_PROJECTNAME, KEY_URL, KEY_CALIMERO}, 
    null, null, null, null, null);

  if (mCursor != null) {
   mCursor.moveToFirst();
  }
  return mCursor;
}

Что мне нужно изменить, чтобы увидеть ListView в порядке убывания? Или мне нужно что-то изменить в моем SimpleCursorAdapter?

Спасибо!


person Mokkapps    schedule 18.09.2012    source источник


Ответы (3)


При выполнении запроса предпоследним параметром (на данный момент пустым) является параметр Order By: https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query%28boolean,%20java.lang.String,%20java.lang.String%5B%5D,%20java.lang.String,%20java.lang.String%5B%5D,%20java.lang.String,%20java.lang.Строка,%20java.lang.String,%20java.lang.String%29

Вам нужно будет выбрать столбец, по которому вы хотите отсортировать, и изменить его. Чтобы быть в безопасности, вы, вероятно, должны явно сортировать как в «нормальном», так и в «обратном» порядке, чтобы быть уверенным, что он упорядочивается по одному и тому же столбцу.

person manavo    schedule 18.09.2012
comment
хорошо, может быть, я просто не понимаю, но какой столбец мне выбрать, если я хочу изменить порядок? Я изменил команду запроса на Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, KEY_ROUTERIP, KEY_PROJECTNAME, KEY_URL, KEY_CALIMERO}, null, null, null, KEY_PROJECTNAME+" DESC", null); и теперь получаю java.lang.NullPointerException - person Mokkapps; 18.09.2012
comment
Не знаю, почему это не сработает. Вот пример, который выглядит так же: anddev.org/post3998.html#p3998, но, кажется, имеет другое количество нулей. Может быть, проверить параметры и убедиться, что 6-й - это Order By? - person manavo; 18.09.2012
comment
В вашем связанном примере они используют 7-й, но я также попробовал этот, и результат снова NullPointerException.... - person Mokkapps; 18.09.2012
comment
Ах, извините, исключение NullPointerException было из другой строки, это ошибка из logcat java.lang.IllegalArgumentException: HAVING clauses are only permitted when using a groupBy clause - person Mokkapps; 18.09.2012
comment
Решение:Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, KEY_ROUTERIP, KEY_PROJECTNAME, KEY_URL, KEY_CALIMERO}, null, null, null, KEY_PROJECTNAME+" DESC"); - person Mokkapps; 18.09.2012

Чтобы изменить порядок, мне пришлось изменить запрос в моем обработчике SQL следующим образом!

Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, KEY_ROUTERIP, KEY_PROJECTNAME, KEY_URL, KEY_CALIMERO}, null, null, null,  KEY_PROJECTNAME+" DESC");
person Mokkapps    schedule 18.09.2012

Если вы не хотите использовать запрос, вот альтернатива:

cursor.moveToLast();
do
{
    // your code
}
while (cursor.moveToPrevious());
person Karun Shrestha    schedule 23.09.2016