在ListView中显示数据之前,正在合并光标中的数据



我正在开发一个应用程序,但目前停滞不前。我要做的是在UI上显示之前处理DB中的数据。

我的应用程序收集数据并像这样存储在数据库中。

+--------------------+|名称使用时间|+--------------------+|C 10||B 12||A 23||C 11||A 14|+--------------------+

我以基本的方式实现了CursorLoader和自定义CursorAdapter,它正确地显示了我的原始DB数据及其更新!对我来说太好了!

但我想做的是像这样在列表视图中显示应用程序的聚合时间。

+--------------------+|名称使用时间|+--------------------+|C 21||B 12||A 37|+--------------------+

我曾试图修改我的光标适配器,以便在适配器中进行求和,但它会自动获取每个光标的光标位置,并返回listview的该位置上的视图,无论我是否触摸Used_time数据。我找不到变通办法。

我在活动类中的当前加载程序代码。。

private void loadDB() {
    getLoaderManager().initLoader(0, null, this);   
    cursorAdapter = new MyCursorAdapter(this, null);
    setListAdapter(cursorAdapter);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String[] projection = MyTable.MY_COLUMNS ;
    CursorLoader cursorLoader= new CursorLoader(this, MyContentProvider.CONTENT_URI_APPS, projection, null, null, null);
    return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    cursorAdapter.swapCursor(cursor);
}

适配器代码。

public MyCursorAdapter(Context context, Cursor cursor) {
    super(context, cursor);
        LayoutInflater inflater = LayoutInflater.from(context);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return inflater.inflate(R.layout.app_row, parent, false);
}
@Override
public void bindView (View view, Context context, Cursor cursor) {
    TextView NameTv = (TextView)view.findViewById(R.id.name);
    TextView TimeTv = (TextView)view.findViewById(R.id.time);
    String Name = cursor.getString(1);
    appNameTv.setText(Name);
    int Time = (int)(cursor.getLong(2));
    TimeTv.setText(String.valueOf(Time));           
}

我还想过制作一个新的表、sharedpreference或hashmap来存储聚合数据,但我认为这些都是不必要的开销,因为应用程序会不断收集数据,而且有一种方法可以通过处理适配器来解决这个问题。

有人能提出一个有效的方法吗?提前谢谢。

听起来下面的查询就是您想要的,但由于CursorLoader没有提供执行聚合函数的选项,因此您陷入了困境:

SELECT Name, COUNT(Used_time) FROM MyTable GROUP BY Name;

您应该阅读这篇关于创建自定义URI以及可能在ContentProvider中使用SQLiteQueryBuilder的文章,以便使用CursorLoader执行此查询

GROUP BY with CursorLoader

最新更新