2016-06-10 76 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。 –

相关问题