0

SimpleCursorAdapter で満たされた ListView を表示しようとしています。SimpleCursorAdapter は、次のような rawQuery の実行で満たされた Cursor を受け取ります。

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はかなり高速でした(「通常の高速」hsh)。

私の質問: listView を埋めるために rawQuery で実行できる JOIN の制限はありますか? 私は何か間違ったことをしていますか?rawQuery() の代わりに、リポジトリで query() を使用する必要がありますか?

英語で申し訳ありませんが、事前に感謝します。

4

1 に答える 1

3

SimpleCursorAdapter に提供する Cursor は、データベース クエリからの結果セットです。データベース クエリが高速な場合、問題は CursorAdapter にあります。CursorAdapter のパフォーマンスが低いことを経験しました (SimpleCursorAdapter と、CursorAdapter または ResourceAdapter を拡張するカスタム アダプターの両方を使用)。Cursor からデータを取得し、配列に入れ、ArrayAdapter を拡張することで、パフォーマンスが大幅に向上しました。

于 2011-06-08T16:28:48.747 に答える