对DB数据进行排序并在列表视图中显示

时间:2012-04-13 10:26:51

标签: android sqlite cursor

我使用

从我的数据库中获取数据
cursor = db.query("WebLeadMaster", select, "condition1="+conditionVal1+
" and condition2="+ConditionVal2,null, null, null, "RegistrationTime DESC");

我正在光标中获取数据。要显示数据,请使用以下代码:

    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, 
            R.layout.resultleadlookup, cursor, columns, to); 
    mAdapter.notifyDataSetChanged();
    lstResult.setAdapter(mAdapter);

所以,我无法修改游标的内容。排序查询的条件为“RegistrationTime”,它是 字符串数据类型。 如下图所示,它没有采用正确的排序格式。 (不是根据日期时间)。

我应该在代码中进行哪些更改,以便根据日期时间进行正确排序?

expected output and actual output

如果我改变我的数据库查询,看起来像

cursor = db.query("WebLeadMaster", select, "condition1="+conditionVal1+
" and condition2="+ConditionVal2,null, null, null, null);

它提供升序。我想要的只是降序。

4 个答案:

答案 0 :(得分:2)

最简单的建议是将日期保存为不同的格式(但仍保存为字符串)到数据库中。如果您将数据保存为SQLite的默认日期格式(YYYY-MM-DD HH:NN:SS),您可以轻松地对日期进行排序。

要以您的格式显示日期,您只需要将日期重新格式化为正确的格式。

答案 1 :(得分:2)

好吧,我改变了我的表结构。我在其中添加了另一个字段“_id”。将属性设置为 AUTO INCREMENT ,并根据 _id 字段对列表进行排序。

答案 2 :(得分:1)

如果您使用ORM,则可以按时间戳对数据进行排序。 ORM使数据库中的数据插入和数据检索更容易。 您必须将jar文件包含到项目中才能使用ORM ...

答案 3 :(得分:0)

由于SQLite没有日期时间类型,在SQLite(EPOCH时间)中将日期类型存储为LONG / INT / NUMERIC,因此更容易排序

然后将ViewBinder添加到Adapter

        /*field in activity/fragment*/
        final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //or other format that you wana to show in ListView
        ...
        mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

            @Override
            public boolean setViewValue(View view, Cursor cursor,
                    int columnIndex) {
                final int id = view.getId();
                switch (id) {
                    case R.id.id_of_textview_with_date_data:
                        final Calendar cal = Calendar.getInstance();
                        cal.setTimeInMillis(cursor.getLong(columnIndex));
                        ((TextView) view).setText(sdf.format(cal.getTime()));
                        return true;
                }
                return false;
            }
        });

...或者像dennisg指出的那样将它存储为STRING / VARCHAR 编辑:在“yyyy-MM-dd HH:mm:ss”格式中