0

Android で特定の条件に一致するすべての連絡先を照会するにはどうすればよいですか?

たとえば、名前と電話番号はあるがプロフィール写真がないすべての連絡先を取得したいとします。

SQL のことを理解しているので、クエリに渡されるある種の選択が必要ですが、上記の例では正確にどのように見えるでしょうか?

私は現在、最初にすべての連絡先を照会し、その後、それを繰り返してフィルタリングするアプリを実行しているため、質問しています。これは、適切な連絡先を直接照会するよりもはるかにパフォーマンスが低いようです

4

1 に答える 1

3

連絡先が SQLite データベースに保存されているという意味では正しいですが、連絡先コンテンツ プロバイダーを介してアクセスされます。

Contacts Content Provider は、3 つのテーブル形式で編成されています。データ構造の一番下には、データ テーブルがあります。ここには、特定の RawContact に関連するすべてのデータがあります (後で説明します)。データ テーブルには、電話番号、電子メール、住所などの情報が格納されます。これは、mimetypes データベースで定義された MIME 名と値のペアを使用して行われます。1 つ上のレベルは RawContacts データベースです。ここには、同じアカウントに関連するすべての情報が表示されます (つまり、Contact John Doe は twitter と Facebook のアカウントを持っている可能性があります)。つまり、RawContacts テーブルは、同じ人物に関連するデータ MIME タイプを追跡するため、異なるアカウントに対して同じ情報を複数回保存する必要はありません。データ構造の最上部には、1 人の人物に関するすべての情報をグループ化する Contacts テーブルがあります。これは基本的に、すべてのアカウント情報を 1 つの連絡先に統合する方法です。この連絡先については、通常と同じように考えてください。

バックグラウンド スレッドでクエリを実行できる Loader クラスを確認する必要があります。Cursor の Loader コールバックを実装した後でこのクラスを使用すると、CursorLoader が作成されます。そのコンストラクター パラメーターの 1 つは、クエリの一部として含める制約を指定できる典型的な MySQL where 句です。

ここでは、データベースを照会するためのローダーのガイドを見つけることができます。

于 2013-07-11T16:35:40.780 に答える