初心者向けAndroidチュートリアルパート4:コンテンツプロバイダー



このAndroidチュートリアルでは、コンテンツプロバイダーの概念について説明します。これはAndroidの重要な構成要素であり、Androidシステムでのデータ交換を容易にします。

初心者向けの以前のAndroidチュートリアルでは、Androidの最初の3つの構成要素について説明しました。 アクティビティ意図 そして サービス 。この記事は、初心者向けのこの一連のAndroidチュートリアルの4番目であり、Androidシステムのもう1つの非常に重要なコンポーネントであるコンテンツプロバイダーについて説明しています。

コンテンツプロバイダーはAndroidシステムの仲介者であり、さまざまなAndroidアプリケーション間のデータ交換を容易にします。このAndroidチュートリアルでその詳細を少し見てみましょう。





初心者のためのAndroidチュートリアル-4ボーナス: ここからコンテンツプロバイダーコードをダウンロードします 。チュートリアルを終えたら、このコードが必要になります。 :)

[dl url =”#” class =” eModal eModal-6” title =”ダウンロードコード” desc =”” type =”” align =”” for =” download”]



Androidチュートリアル:コンテンツプロバイダー

コンテンツプロバイダーは、中央のデータストアまたはウェアハウスへのアクセスを容易にして、さまざまなアプリケーション間でのデータ共有とデータ操作を可能にします。

AndroidシステムのAPIのデフォルトのコンテンツプロバイダーの例を次に示します。

Androidチュートリアル:Androidシステムのデフォルトのコンテンツプロバイダー



これらのコンテンツプロバイダーは、基盤となるデータベースからのユーザーの抽象化を可能にします。通常、コンテンツプロバイダーはSQLiteを使用して基盤となるデータベースを保存します。

古き良きFacebookアプリケーションのこれまでに役立つ例を見てみましょう。これは、以前のAndroidチュートリアルでも物事を単純化するのに役立ちました。

ソーシャルネットワーキングライフのある時点で、Facebookのタイムラインに写真をアップロードしました。どうやってやるの?

壁の写真ボタンをクリックすると、フォトギャラリーが表示されます。そこから、アップロードする写真を選択できます。

の以前の記事を読んだこと Androidチュートリアルシリーズ 、あなたは活動と意図について知っているので、これが起こることを知っています:

あなたのFacebookウォールは「アクティビティ」です。写真ボタンをクリックすると、メッセージを伝える「INTENT」が渡され、「CONTENTPROVIDER」(フォトギャラリー)が開きます。写真はネットワークアップロード「SERVICE」を使用してアップロードされます。

このライブビデオを見て、Facebookアプリケーション内でコンテンツプロバイダーがどのように機能するかを確認してください。

Androidシステムにコンテンツプロバイダーが必要なのはなぜですか?

1つのアプリケーションで作成されたデータベースは、2番目のアプリケーションからは見えないため、コンテンツプロバイダーが必要になります。

SQLiteを使用してさまざまなアプリケーションでデータベースを作成して保存するのは簡単ですが、問題はこれです。 Androidのデータベースは、それを作成するアプリケーション専用です 。 Androidには、すべてのアプリケーションがアクセスできる共通のストレージ領域はありません。したがって、さまざまなアプリケーションがデータベースを使用するには、Androidシステムにそのようなアプリケーション間およびプロセス間のデータ交換を可能にするインターフェースが必要です。ここでコンテンツプロバイダーが活躍します。

本当にコンテンツプロバイダーが必要ですか?

1)あなた プライベートデータベースが必要な場合は、独自のプロバイダーを開発する必要はありません 特定のアプリケーションの場合(このデータベースは、それを作成したアプリケーション以外のアプリケーションからはアクセスできません)。

2)しかしあなたは カスタム検索候補を提供するには、カスタムプロバイダーが必要です 独自のアプリケーションシステムで。

3)コンテンツプロバイダーも必要になります アプリケーションから他のアプリケーションに複雑なデータをコピーして貼り付ける。

コンテンツプロバイダーがサポートする操作は何ですか?

コンテンツプロバイダーは、次の基本的な操作をサポートしています。

javascriptイベントとは

1) クエリ: 指定されたURIに基づいて、すべてのオブジェクトのコンテンツプロバイダーを照会します。

2) 削除: 指定されたオブジェクトをコンテンツプロバイダーのデータベースから削除します。

3) 更新: データベース内のオブジェクトを更新します。

4) インサート: データベースに新しいオブジェクトを挿入します。

コンテンツプロバイダーで操作を実行する手順

ステップ1:コンテンツプロバイダーへのアクセス

ContentResolverクライアントオブジェクト コンテンツプロバイダーからのデータにアクセスするために使用されます。プロバイダーオブジェクトと通信し、プロバイダーオブジェクトはデータにアクセスする要求を受け入れ、目的の結果を返します。プロバイダーとプロバイダークライアントオブジェクトによって提供されるデータ交換インターフェイスにより、さまざまなプロセス/アプリケーション間の通信が可能になります。

データベースにアクセスする必要があるアプリケーションは、これを宣言し、マニフェストファイルでアクセス許可を要求する必要があります。これについては、以降のAndroidチュートリアルで詳しく説明します。

コンテンツURI

コンテンツURIは、プロバイダー内のデータを識別するために使用される引数の1つです。これには4つの部分があります。

1) スキーム: コンテンツプロバイダーのスキームには、「コンテンツ」という定数値があります。

2) 権限: これはプロバイダーの象徴的な名前であり、それぞれに固有です。これが、非常に多くのリストから目的のコンテンツプロバイダーを選択する方法です。

3) 道:必要なデータを完全なデータベースから区別するのに役立ちます 。たとえば、通話履歴コンテンツプロバイダーは、さまざまなパスを使用して、不在着信、着信などを区別します。

4) ID: これは必須のコンポーネントではなく、URIに存在しない場合がありますが、存在する場合は数値である必要があります。例えば、 メディアコンテンツプロバイダーから特定の音楽ファイルにアクセスする場合は、IDも指定します

プロセス

ContentResolverは、プロバイダー権限を使用して、正しいコンテンツプロバイダーを識別します(権限はコンテンツプロバイダーごとに一意であるため)。その後、URIのパスコンポーネントを使用して、正しい(要求された)データテーブルを選択します。 IDが存在する場合、プロバイダーはどの正確なデータが要求されているかを知っています。

URIには次の2つのタイプがあります。

さらに、URIには制限情報を含めることもできます。

セールスフォースサービスクラウドとは

ステップ2:コンテンツプロバイダーからデータを取得する方法

ContentResolverは現在データテーブルにアクセスできますが、アプリケーションがアクセスできない限り、必要なデータを取得できません。 「読み取りアクセス許可」 その特定のプロバイダーのために。この権限は、各コンテンツプロバイダーのマニフェストファイルで定義されています。

そのすべてのアプリケーション (このデータベースにアクセスしたい) この許可を要求する必要があります。

このAndroidチュートリアルで前述したように、 コンテンツプロバイダーを使用して4つの操作を実行できます 。一つずつ見ていきます。

クエリ

これで、プロバイダーにアクセスし、プロバイダーからデータを取得する権限があります。次のステップは プロバイダーに必要なアクションを要求するクエリを作成します

クエリ中に使用される引数は次のとおりです。

1) 嫌い :上記で説明したとおりに機能します。

2) 投影: クエリは データベーステーブル全体から一連の列を返します 。これはプロジェクションとして知られています。 nullを渡すと、すべての列が返されますが、これは非効率的です。

3) 選択条項:返す行を宣言するフィルター 、SQL WHERE句としてフォーマットされます(WHERE自体を除く)。 nullを渡すと、指定されたURIのすべての行が返されます。

たとえば、名簿の検索列にアルファベット(「P」など)を入力すると、「P」で始まるすべての連絡先の詳細が返されます。ただし、検索バーに何も入力しないと、連絡先の完全なリストが取得されます(このような場合、選択句は「null」に設定されます)。

セールスフォースでアプリを作成する方法

4) 選択引数: 選択範囲に「?s」を含めることができます。これは、選択範囲に表示される順序で、selectionArgsの値に置き換えられます。

5) SortOrder: SQL ORDER BY句(ORDER BY自体を除く)。 nullを渡すと、順序付けされていない可能性のある結果がフェッチされます。

クエリのコード例:

  • 連絡先で電話番号を検索する
カーソルcursor = contentresolver.query(ContactsContract.Contacts.CONTENT_URI、null、null、null、null)int count = cursor.getCount()if(count> 0){String contactDetails = '' while(cursor.moveToNext()){ String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex(columnId)String id = cursor.getString(cursorIndex)String name = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))int numCount = Integer.parseInt (cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))if(numCount> 0){Cursor phoneCursor = contentresolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI、null、CommonDataKinds.Phone.CONTACT_ID + '=?' 、new String [] {id}、null)while(phoneCursor.moveToNext()){String phoneNo = phoneCursor.getString(phoneCursor .getColumnIndex(ContactsContract.CommonDataKinds。Phone.NUMBER))contactDetails + = '名前:' +名前+ '、電話番号:' + phoneNo + ''} phoneCursor.close()}}}

挿入

名簿に新しい連絡先を挿入したいとします。 ContentValuesオブジェクト これらの挿入を行うために使用されます。これを実現するには、ContentValueオブジェクトキーとコンテンツプロバイダー列が一致している必要があります。この例を次に示します。

挿入のコード例:

  • 操作は、名前が「Rajnikant」で番号が「9988999888」の新しいエントリを挿入することです。
//操作ArrayListops = new ArrayList()int rawContactInsertIndex = ops.size()ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE、null).withValue(RawContacts.ACCOUNT_NAME、null).build ())ops.add(ContentProviderOperation .newInsert(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID、rawContactInsertIndex).withValue(Data.MIMETYPE、StructuredName.CONTENT_ITEM_TYPE).withValue(StructuredName.DISPLAY_NAME、“ Rajnikant”)。build() )ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID、rawContactInsertIndex).withValue(Data.MIMETYPE、Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER、“ 9988999888”)。withValue(Phone.TYPE 、Phone.TYPE_MOBILE).build())getContentResolver()。applyBatch(ContactsContract.AUTHORITY、ops)

更新

コンテンツプロバイダーを更新するには、次の引数を使用します。

1) 嫌い: コンテンツプロバイダーのURI

2) ContentValues: これには、既存のデータを置き換える値が含まれています。

3) 選択条項: これは、更新する特定のレコードを選択するのに役立ちます

4) 選択引数: 選択範囲に「?s」を含めることができます。これは、選択範囲に表示される順序で、selectionArgsの値に置き換えられます。

もう一度、 ContentValuesオブジェクトのキーは、コンテンツプロバイダーの列と一致する必要があります そうしないと、更新は行われません。

更新のコード例:

  • 名前が「Rajnikant」である電話番号を更新する
文字列ここで= ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“ Rajnikant”} ArrayList ops = new ArrayList()ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).withSelection(where、params).withValue(ContactsContract.CommonDataKinds。 Phone.NUMBER、“ 9876543210”)。build())getContentResolver()。applyBatch(ContactsContract.AUTHORITY、ops)

削除

削除では、ContentValues引数を除いて、更新と同じ引数を使用します。ContentValues引数は、置換された値がないため必須ではありません。

削除のコード例:

  • 名前が「Rajnikant」である連絡先を削除します
文字列ここで= ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“ Rajnikant”} ArrayList ops = new ArrayList()ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).withSelection(where、params).build())getContentResolver( ).applyBatch(ContactsContract.AUTHORITY、ops)

挿入操作の場合、URIはディレクトリベースである必要があります。他のすべての場合、URIはIDベースまたはディレクトリベースのいずれかになります。

望みでは 初心者向けのAndroidチュートリアル:パート5 理解するのはそれほど難しくありませんでした!コンテンツプロバイダーについては、以降のAndroidチュートリアルで詳しく説明します。それまでの基本をお楽しみください!

このAndroidチュートリアルに疑問がありますか?私達に聞いてくれ。

ハッピーラーニング!

このAndroidチュートリアルの作成には、次のリソースが使用されました。 公式Android開発者Edureka.in

あなたはこれらの関連する投稿も好きかもしれません: