2013-05-26 25 views
0

我正在製作Android應用程序來管理項目。我的項目表中的每個項目都有一個值爲0(已計劃),1(當前)或2(已完成項目)的project_status列。做內容提供商的多項指標(最佳實踐?)

在我的應用程序的片段之一,我給用戶一個概述他有多少個項目,每種類型。因此,例如

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個狀態的計數? 我應該只加載一個正常的光標(不計數)所有我的項目,並在我的onload中迭代它?或者我應該製造3臺裝載機(還是這樣會從設備問得太多?)。 或者我應該在我的contentprovider中處理這個問題?

在此先感謝。

回答

1

你自己回答了。您只需創建3個不同的裝載機。設備上的重量非常小。當然,最好的做法是儘可能減少對數據庫的查詢,但Android最大限度地減少了處理SQLite數據庫查詢的工作量。

旁註:爲了透明,我會選擇 - 在我看來 - 只需創建三個裝入器來查詢where子句的所有實例,而不是計數。如果你這樣做,你會得到一個遊標,你可以通過cursor.getCount()來獲得計數。此外,與此同時,您的設備不會受到嚴重摺磨,並且您將如何處理內容的方式更加透明。