Android 对内容提供商进行多次计数(最佳实践?)

Android 对内容提供商进行多次计数(最佳实践?),android,android-contentprovider,Android,Android Contentprovider,我正在制作一个用于管理项目的Android应用程序。“我的项目”表中的每个项目都有一个值为0(计划)、1(当前)或2(已完成项目)的“项目状态”列 在我应用程序中的一个片段中,我向用户概述了每种类型的项目数量 比如说 24完成 3电流 10计划 我正在使用内容提供商与数据库交互。目前,我可以通过此代码获得3种状态之一的单个计数(普通加载程序): @覆盖 公共加载器onCreateLoader(int arg0,Bundle arg1){ 返回新的android.support.v4.conten

我正在制作一个用于管理项目的Android应用程序。“我的项目”表中的每个项目都有一个值为0(计划)、1(当前)或2(已完成项目)的“项目状态”列

在我应用程序中的一个片段中,我向用户概述了每种类型的项目数量

比如说

24完成 3电流 10计划

我正在使用内容提供商与数据库交互。目前,我可以通过此代码获得3种状态之一的单个计数(普通加载程序):

@覆盖
公共加载器onCreateLoader(int arg0,Bundle arg1){
返回新的android.support.v4.content.CursorLoader(this.getActivity(),ProjectDbProvider.content_URI,新字符串[]{“count(*)AS count”},ProjectsTable.COLUMN_STATUS_PROJECT+“=?”,新字符串[]{“2”},null);
}
加载后,我有以下代码来获取计数:

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
    TextView textViewFinished = (TextView) getActivity().findViewById(R.id.btn_proj_finished);
    cursor.moveToFirst();
    String count = String.valueOf(cursor.getInt(0));
    textViewFinished.setText(count);
}
@覆盖
public void onLoadFinished(加载器arg0,光标){
TextView textViewFinished=(TextView)getActivity().findViewById(R.id.btn_proj_finished);
cursor.moveToFirst();
字符串计数=String.valueOf(cursor.getInt(0));
textViewFinished.setText(计数);
}

这很好用
现在我想知道,同时获得所有3种状态的计数是什么样的最佳方法/最佳实践? 我是否应该加载所有项目的普通游标(不计算),并在onloadfinished中对其进行迭代?或者我应该制作3个加载器(或者这是否对设备要求太高?)。 或者我应该在contentprovider中处理这个问题


提前谢谢。

你自己回答的。您只需创建3个不同的加载程序。设备上的重量非常小。当然,尽可能减少对数据库的查询,但Android已经将处理SQLite数据库查询的工作量减到了最低

旁注:为了透明起见,在我看来,我会选择只创建三个加载程序来查询where子句的所有实例,而不是count。如果您这样做,您将得到一个游标作为回报,您可以执行Cursor.getCount()来获取计数。同时,您的设备不会受到严重影响,您将有一个更透明的方式来处理您的内容

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
    TextView textViewFinished = (TextView) getActivity().findViewById(R.id.btn_proj_finished);
    cursor.moveToFirst();
    String count = String.valueOf(cursor.getInt(0));
    textViewFinished.setText(count);
}