【问题标题】:Reverse order in ListView using SimpleCursorAdapter and SQLite使用 SimpleCursorAdapter 和 SQLite 在 ListView 中反转顺序
【发布时间】:2012-09-10 21:10:54
【问题描述】:

我正在使用 SimpleCursorAdapter 用我的 SQLite 数据库中的数据填充 ListView。数据很好,但最新的条目总是插入到 ListView 的底部,我想把它放在顶部。

我已经找到了这个post,但我不知道如何将它导入到我的项目中。 目前我的 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 上进行更改?

谢谢!

【问题讨论】:

    标签: android sqlite listview sql-order-by simplecursoradapter


    【解决方案1】:

    运行查询时,倒数第二个参数(此时为空)为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.String,%20java.lang.String,%20java.lang.String%29

    您需要选择要排序的列,然后进行更改。为了安全起见,您可能应该明确地按“正常”和“反向”顺序进行排序,以确保它按同一列排序。

    【讨论】:

    • 好吧,也许我只是不明白,但如果我想颠倒顺序,我应该选择哪一列?我将查询命令更改为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
    • 不知道为什么那行不通。这是一个看起来做同样的例子:anddev.org/post3998.html#p3998,但似乎有不同的空值。也许检查参数并确保第 6 个是 Order By?
    • 在您的链接示例中,他们使用了第 7 个,但我也尝试了这个,结果又是 NullPointerException....
    • 抱歉 NullPointerException 来自另一行,这是来自 logcat java.lang.IllegalArgumentException: HAVING clauses are only permitted when using a groupBy clause的错误
    • 解决方案:Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, KEY_ROUTERIP, KEY_PROJECTNAME, KEY_URL, KEY_CALIMERO}, null, null, null, KEY_PROJECTNAME+" DESC");
    【解决方案2】:

    要颠倒顺序,我必须像这样更改我的 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");
    

    【讨论】:

      【解决方案3】:

      如果您不想使用查询,这里有一个替代方案:

      cursor.moveToLast();
      do
      {
          // your code
      }
      while (cursor.moveToPrevious());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2012-05-18
        • 1970-01-01
        • 2011-12-14
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多