2016-06-10 72 views
0

我有一個ListView設置從一個遊標抓住數據庫中的前10行(LIMIT)。如何獲得沒有限制的遊標計數?

cursor = db.query("MYTABLE", 
      new String[]{"_id", "NUMBER", "NAME"}, null, null, null, null, null, "10"); 

該列表設置爲「無限滾動」。它通過(從OnScrollListeneronScroll)比較列表中的項目的滾動完成的數量,一旦在數據庫中的項目數

public void onScroll(AbsListView view, int firstVisibleItem, 
           int visibleItemCount, int totalItemCount) { 

       if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0) 
       { 
        ListView listView = (ListView) findViewById(R.id.my_list); 

        long numberOfItemsInDB = DatabaseUtils.queryNumEntries(db, "MYTABLE"); 
        long numberOfItemsInList = listView.getAdapter().getCount(); 
        long difference = numberOfItemsInDB - numberOfItemsInList; 

        if (difference > 0) { 
        ... //do stuff here 
        } 

這工作。但是有時這個列表可能會被自定義光標的項目填充(例如,來自搜索過濾),所以我需要該光標的項目數。我可以通過使用.getCount()來保持一致的計數,但是如果我已經使用了LIMIT,那麼它就會返回我已經是10的LIMIT。

如何獲取遊標中的項數忽略限制?

+0

你的代碼是用你通常會從遠程服務器獲取數據使用分頁方法計數。當您從本地數據庫獲取數據時,您不需要該分頁邏輯。 'Cursor'類 - 特別是'SQLiteCursor'類 - 在內部處理所有分頁。通過一個'CursorAdapter'和一個循環'ListView',你擁有了你需要的一切。把你想要的整個數據集的查詢放進去,得到'Cursor',並讓'CursorAdapter'和'ListView'完成剩下的工作。 –

+0

@krislarson所以我應該讓我的遊標拉動整個數據庫並使用cursoradapter來限制它?我不確定你的分頁邏輯是什麼意思,在哪裏建立到列表視圖,它可以處理自動滾動負載開箱即用? – Prof

+0

通過分頁我的意思是你放在'onScroll'方法中的邏輯 - 向下滾動直到某個點,然後去獲得更多的項目來顯示。這10個項目將代表一個「頁面」。現在,當你運行一個查詢並生成一個'Cursor'時,整個查詢數據就不會進入內存。如果你願意,你可以查找類似'CursorWindow'的類,並閱讀源代碼以查看遊標的工作方式。儘管如此,如果您在「ListView」中查詢所需的所有內容,並將得到的「Cursor」放入「CursorAdapter」中,您將能夠滾動瀏覽整個列表,而不會出現明顯的性能問題。 –

回答

0

使用下面的方法獲取表中的行數。

public synchronized long getRowCount(String TABLE_NAME) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    return DatabaseUtils.queryNumEntries(db, TABLE_NAME); 
} 

爲了得到錶行與where條款

public synchronized long getRowCount(String TABLE_NAME) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    return DatabaseUtils.queryNumEntries(db, TABLE_NAME, "NAME like ?", new String[]{"%D%"}) 
} 
+0

這將返回表格的行數。我在沒有限制的遊標行數之後。 – Prof

+0

它將返回無限制的行數。 –

+0

有關更多信息,請參閱https://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries。 –

相關問題