对内容提供商进行多项处理(最佳做法?)

时间:2013-05-26 12:45:48

标签: android android-contentprovider

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

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

所以例如

24完了 3电流 10计划

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

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
  return new android.support.v4.content.CursorLoader(this.getActivity(), ProjectDbProvider.CONTENT_URI, new String[] {"count(*) AS count"}, ProjectsTable.COLUMN_STATUS_PROJECT + "=?", new String[] {"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);
}


这非常有效。
现在我只是想知道最佳方法/最佳实践是什么同时获得所有3种状态的计数? 我应该只加载我所有项目的正常光标(不计数)并在我的onloadfinished中迭代它吗?或者我应该制作3个加载器(或者这个设备要求太多吗?)。 或者我应该在我的contentprovider中处理这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你自己回答了。您只需创建3个不同的装载机。设备上的重量非常小。当然,最好尽可能减少对数据库的查询,但Android已经最大限度地减少了处理SQLite数据库查询的工作量。

旁注:为了透明,我会选择 - 在我看来 - 只创建三个加载器来查询where子句的所有实例,而不是计数。如果你这样做,你得到一个Cursor作为回报,你可以做cursor.getCount()来获取计数。此外,您的设备不会受到严重影响,您可以更加透明地处理内容。