1

私は非常に速く完了する必要がある Android プロジェクトに取り組んでいます。

アプリの機能の 1 つは、SQLite データベース コンテンツを読み込み、ListActivity 内の ListView にリストすることです。

データベースにはいくつかのテーブルが含まれており、そのうちの 2 つは非常に大きいです。

データベース内の各項目には多くの列があり、そのうち少なくとも 2 つ (名前、価格) を表示する必要がありますが、できれば 3 つです。

アプリのこの部分で行う必要があるのは、データベースを読み取ってリストすることだけなので、これは非常に簡単な作業に思えるかもしれません。これを問題なく実行し、アプリと小さなサンプル データベースを比較してテストしました。

私の最初のバージョンでは、Cursor を使用してクエリを取得し、次に ArrayAdapter をリストのアダプターとして使用しました。クエリの後、カーソルを最初から最後までループし、位置ごとに Cursor のコンテンツをアダプターに追加します。

onItemClickListener は、データベースに対して他のパラメーター (基本的にはカテゴリを開きます) に対して再度クエリを実行するため、アダプターをクリアし、カーソルをループして、そのコンテンツをアダプターにもう一度追加します。

アプリは魔法のように機能しましたが、現実の大きなデータベース (>300MB) を使用すると、コンテンツの表示に突然アプリが非常に長くかかり、時にはブロックすることさえありました。

そこで私はいくつかの調査を行い、通常のパラメーター (String[] from、int[] to など) を使用して Cursor の内容を ListView に自動的にリンクする SimpleCursorAdapter の使用を開始しました。 .R.id.text1 および text2)。

問題は、ロード時間があまり変わらないことです。

さまざまな Web サイトやチュートリアルでいくつかの提案されたソリューションに出くわしましたが、それらのほとんどは何らかの形で AsyncTask クラスを使用しています。これを自分で手動で実装しようとしましたが、複数のスレッドを追跡するのが難しく、失敗しました。

チュートリアルでは、コンテンツ プロバイダーでこれを行う方法を説明し続けていますが、私の特定の状況について明確なものは何も見つかりませんでした: 非常に大きな SQLite データベース -> ListView への読み取り。

今、私の頭は、LoaderManager、LoaderAdapter などの概念で満たされ、頭の中ですべてが混ざり合って混乱しています。

この「単純な」タスクを実行するための完全で、素晴らしく、クリーンなソリューションを誰かに提供してもらえますか?

繰り返しますが、BIG SQLiteDatabase を読み取り、ListView に表示したいと考えています。アプリがブロックされないようにしたい。

パラメーターとしてクエリと ListActivity のコンテキストを受け取り、クエリの結果をビューに表示することを処理するメンバー関数を持つクラスが必要です。

抽象的な回答はしないでください。時間がなくなり、今非常に混乱しており、クリーンで完全なソリューションが必要です。

あなたは私の唯一の希望です。

4

3 に答える 3

3

そのような大規模なデータベースをクエリすると、tym がかかります。スマートな方法を見つける必要があります。

データベースクエリを制限して最初の10または30アイテムを取得してから維持し、最後のアイテムに到達したら残りの30アイテムをクエリしてバインドします

このチュートリアルを参照してください。リスト ビューで動的にデータを追加する方法を説明します。

http://p-xr.com/android-tutorial-dynamicaly-load-more-items-to-the-listview-never-ending-list/

上記のリストの有効期限が切れています。これを確認してください

http://mobile.dzone.com/news/android-tutorial-dynamicaly

于 2013-04-01T12:18:58.253 に答える
1

大規模なデータベースをクエリすると、データを取得してリスト ビューに表示するのに時間がかかります。そのため、実行時にデータを移入することをお勧めします。Lazy Adapter の概念を使用してデータをロードできます。このリンク1 は、あなたにとって役立つかもしれません。

ありがとう

于 2013-04-01T12:36:48.843 に答える
1

も使用できます:

public class TodosOverviewActivity extends ListActivity implements
    LoaderManager.LoaderCallbacks<Cursor>

詳細については、このリンクを確認してください。

于 2013-04-01T13:07:09.293 に答える