0

我试图显示一个充满 SimpleCursorAdapter 的 ListView。SimpleCursorAdapter 接收一个 Cursor,其中填充了 rawQuery 的执行,例如:

SELECT DISTINCT s.cod AS _id, s.name AS name FROM supplier s
   INNER JOIN product p ON p.supplier = s.cod
   INNER JOIN productprice pp ON pp.product = p.cod
WHERE
   pp.category = 'w'
ORDER BY s.name

当我直接在基中执行此查询时,它会在不到 0.1 秒(正常)内返回 40 行。存储库中 rawQuery 的执行也非常快。问题是当我做myListView.setAdapter(simpleCursorAdapter);. 需要2分钟以上!所以我已经将查询更改为SELECT cod AS _id, name FROM supplier ORDER BY name并且执行setAdapter速度非常快(“正常快速”hshs)。

我的问题:存在我可以在 rawQuery 中执行以填充 listView 的 JOIN 限制吗?难道我做错了什么?我应该在存储库中使用 query() 而不是 rawQuery() 吗?

对不起英语,提前谢谢。

4

1 回答 1

3

您提供给 SimpleCursorAdapter 的 Cursor 是来自数据库查询的结果集。如果数据库查询很快,那么问题出在CursorAdapter。我经历过 CursorAdapter 的性能很差(使用 SimpleCursorAdapter 和扩展 CursorAdapter 或 ResourceAdapter 的自定义适配器)。我最终从光标中提取数据,放入一个数组中,并扩展了 ArrayAdapter,这给了我更好的性能。

于 2011-06-08T16:28:48.747 回答