16

Android開発初心者です。内部データベース (SQLite) から読み取り、すべてのデータをリストに表示するアプリケーションを作成しようとしています (私は を使用していlistViewます)。

DatabaseHandlerこれまでのところ、拡張SQLiteOpenHelperされ、すべてのデータベース操作 (データの選択、データの挿入、データの削除など) を実行するというクラスを取得しました。

しかし、値を一覧表示したいので、 のLoader代わりにを使用する必要があるいくつかの Web サイトを読んでいるCursorので、ContentProvider. ContentProviderこれまでのところ、データベースへの制御されたアクセスを提供することを理解しています。

私の質問は: はContentProviderと同じSQLiteOpenHelperですか?

また、API レベル 8 を使用ContentProviderしていますが、API レベル 11 でのみ使用できます。これを解決する最善の方法は何ですか?

前もって感謝します。

4

2 に答える 2

10

私の質問は: ContentProvider は SQLiteOpenHelper と同じことをしますか?

ContentProvider他の開発者がアプリケーション内のアプリケーションのデータベースにアクセスすることを許可する場合、アプリケーションの開発者によって実装されます - 簡単に言えば共有です。それはデータベースのサーバーのようなもので、その権限ContentResolverを知っているのはクライアントです。ContentProviderたとえば、デバイスから連絡先を取得する必要がある場合はContentProvider、 Contacts データベースを使用する必要があります。より具体的には、それはContract クラスです。

適切な権限を知っている場合はContentProvider、オブジェクトを使用してその権限と通信できContentResolverます。

それ以外の場合は、android.databaseおよびandroid.database.sqliteクラスで表される SQL 抽象モデルを介してデータベースとやり取りする必要があります。

またContentProvider、アプリケーションの主要コンポーネントの 1 つとして、プライマリ API レベルから利用できます。

アップデート

公式ドキュメントから:

プロバイダーの構築を開始する前に、次のことを行います。

コンテンツ プロバイダーが必要かどうかを判断します。次の機能を 1 つ以上提供する場合は、コンテンツ プロバイダーを構築する必要があります。

  • 複雑なデータやファイルを他のアプリケーションに提供したい。
  • ユーザーが複雑なデータをアプリから他のアプリにコピーできるようにしたいと考えています。
  • 検索フレームワークを使用して、カスタム検索候補を提供したいと考えています。

  • 于 2012-11-27T14:35:57.510 に答える
    8

    SQLiteOpenHelperデータベースの作成とオープンを管理するために使用されます。これは sqlite データベースのヘルパー クラスにすぎず、db 操作でどこでも使用できます。

    ContentProviderは android の 4 つの基本コンポーネントの 1 つです。残りの 3 つはActivityServiceおよびBroadcastです。ContentProvidersqlite データベースを含む、構造化されたデータ セットへのアクセスを管理するために使用されます。のデータ ソースはデータベースであるContentProvider可能性がありますが、そうである必要はありません。

    ContentProviderContactsProviderや と同様に、他のアプリケーションに独自のデータを提供するためによく使用されますCalendarProviderContentProviderまた、データベースを直接提供するよりも、を使用して特定のインターフェイスを提供する方が安全です。

    于 2012-11-27T14:58:11.200 に答える