Android-Tutorials für Anfänger Teil 4: Inhaltsanbieter



In diesem Android-Tutorial werden die Konzepte des Inhaltsanbieters erläutert. Es ist ein wichtiger Baustein von Android, der den Datenaustausch im Android-System erleichtert.

In unseren vorherigen Android-Tutorials für Anfänger haben wir die ersten drei Bausteine ​​von Android besprochen: Aktivität , Absicht und Dienstleistungen . Dieser Artikel ist der vierte in dieser Reihe von Android-Tutorials für Anfänger und behandelt den Inhaltsanbieter, der eine weitere sehr wichtige Komponente des Android-Systems darstellt.

Content Provider ist der Mittelsmann Ihres Android-Systems und erleichtert den Datenaustausch zwischen verschiedenen Android-Anwendungen. Lassen Sie uns in diesem Android-Tutorial ein wenig auf die Details eingehen.





Android Tutorial für Anfänger-4 Bonus: Laden Sie hier den Code des Inhaltsanbieters herunter . Sie möchten diesen Code, sobald Sie das Tutorial durchlaufen haben! :) :)

[dl url = '#' class = 'eModal eModal-6' title = 'Download-Code' desc = 'type =' align = 'for =' download ']



Android Tutorials: Inhaltsanbieter

Der Inhaltsanbieter erleichtert den Zugriff auf einen zentralen Datenspeicher oder ein zentrales Warehouse, um die gemeinsame Nutzung und Bearbeitung von Daten über verschiedene Anwendungen hinweg zu ermöglichen.

Hier einige Beispiele für Standard-Inhaltsanbieter in der API des Android-Systems:

Android-Tutorials: Standard-Inhaltsanbieter im Android-System



Diese Inhaltsanbieter ermöglichen die Benutzerabstraktion von einer zugrunde liegenden Datenbank. Im Allgemeinen verwenden Inhaltsanbieter SQLite zum Speichern der zugrunde liegenden Datenbank.

Nehmen wir das immer hilfreiche Beispiel der guten alten Facebook-Anwendung, die uns auch in früheren Android-Tutorials geholfen hat, die Dinge zu vereinfachen!

Sie alle haben irgendwann in Ihrem Leben in sozialen Netzwerken ein Bild auf Ihre Facebook-Timeline hochgeladen, richtig! Wie machst du das?

Wenn Sie auf den Fotoknopf an der Wand klicken, gelangen Sie zur Fotogalerie. Von dort aus können Sie ein Foto zum Hochladen auswählen.

Nachdem ich die vorherigen Artikel von gelesen habe Android Tutorials Serie Wenn Sie über Aktivitäten und Absichten Bescheid wissen, wissen Sie, dass Folgendes passiert:

Ihre Facebook-Pinnwand ist eine „AKTIVITÄT“. Wenn Sie auf die Fototaste klicken, wird eine „ABSICHT“ übergeben, die die Nachricht übermittelt, und der „INHALTSANBIETER“ (Fotogalerie) wird geöffnet. Das Foto wird über einen Netzwerk-Upload „SERVICE“ hochgeladen.

Java-String teilt mehrere Trennzeichen

Sehen Sie sich dieses Live-Video an, um zu erfahren, wie der Inhaltsanbieter in Ihrer Facebook-Anwendung funktioniert.

Warum benötigt das Android-System Inhaltsanbieter?

Der Bedarf an Inhaltsanbietern entsteht, weil die in einer Anwendung erstellte Datenbank für eine zweite Anwendung nicht sichtbar ist.

Es ist einfach, mit SQLite eine Datenbank in verschiedenen Anwendungen zu erstellen und zu speichern. Das Problem ist jedoch Folgendes: Eine Datenbank in Android ist für die Anwendung, die sie erstellt, privat . In Android gibt es keinen gemeinsamen Speicherbereich, auf den jede Anwendung zugreifen kann. Damit verschiedene Anwendungen eine Datenbank verwenden können, benötigt das Android-System eine Schnittstelle, die einen solchen Datenaustausch zwischen Anwendungen und Prozessen ermöglicht. Hier kommt der Inhaltsanbieter ins Spiel.

Benötige ich wirklich einen Inhaltsanbieter?

1) Sie Sie müssen keinen eigenen Anbieter entwickeln, wenn Sie eine private Datenbank benötigen für eine bestimmte Anwendung (auf diese Datenbank kann nur von der Anwendung zugegriffen werden).

2) Sie jedoch benötigen einen benutzerdefinierten Anbieter, um benutzerdefinierte Suchvorschläge bereitzustellen in Ihrem eigenen Anwendungssystem.

3) Sie benötigen außerdem einen Inhaltsanbieter um komplexe Daten aus Ihrer Anwendung zu kopieren und in andere Anwendungen einzufügen.

Welche Vorgänge werden von einem Inhaltsanbieter unterstützt?

Inhaltsanbieter unterstützen die folgenden grundlegenden Vorgänge:

ein) Abfragen: Fragt den Inhaltsanbieter für alle Objekte basierend auf dem angegebenen URI ab.

2) Löschen: Löscht die angegebenen Objekte aus der Datenbank eines Inhaltsanbieters.

3) Aktualisieren: Aktualisiert die Objekte in der Datenbank.

4) Einfügen: Fügt ein neues Objekt in die Datenbank ein.

Schritte zum Ausführen eines Vorgangs in Content Provider

Schritt 1: Zugriff auf einen Inhaltsanbieter

ContentResolver-Clientobjekt wird verwendet, um auf Daten vom Inhaltsanbieter zuzugreifen. Es kommuniziert mit dem Provider-Objekt, das wiederum die Anforderung zum Zugriff auf Daten akzeptiert und die gewünschten Ergebnisse zurückgibt. Die vom Anbieter und vom Anbieter-Client-Objekt bereitgestellte Datenaustauschschnittstelle ermöglicht die Kommunikation zwischen verschiedenen Prozessen / Anwendungen.

Die Anwendung, die auf die Datenbank zugreifen muss, muss dies deklarieren und Berechtigungen in ihrer Manifestdatei anfordern. Dies wird in unseren nachfolgenden Android-Tutorials ausführlich erläutert.

Inhalts-URI

Der Inhalts-URI ist eines der Argumente, mit denen die Daten in einem Anbieter identifiziert werden. Es besteht aus vier Teilen:

ein) Planen: Das Schema für den Inhaltsanbieter hat einen konstanten Wert: 'Inhalt'.

2) Behörde: Es ist der symbolische Name des Anbieters und für jeden eindeutig. So wählen wir den gewünschten Inhaltsanbieter aus einer Liste von so vielen aus.

3) Pfad: Pfad hilft bei der Unterscheidung der erforderlichen Daten von der gesamten Datenbank . Beispielsweise unterscheidet der Anrufprotokoll-Inhaltsanbieter zwischen verpassten Anrufen, empfangenen Anrufen usw. über unterschiedliche Pfade.

4) ICH WÜRDE: Es ist keine obligatorische Komponente und möglicherweise nicht in der URI vorhanden. Falls vorhanden, sollte es numerisch sein. Beispielsweise, Wenn Sie von Ihrem Media Content Provider aus auf eine bestimmte Musikdatei zugreifen möchten, geben Sie auch eine ID an .

Der Prozess

Mithilfe der Berechtigung des Anbieters identifiziert der ContentResolver den richtigen Inhaltsanbieter (da die Berechtigung für jeden Inhaltsanbieter eindeutig ist). Danach wird die Pfadkomponente des URI verwendet, um die richtige (angeforderte) Datentabelle auszuwählen. Falls eine ID vorhanden ist, weiß der Anbieter, welche genauen Daten angefordert werden.

Es gibt zwei Arten von URIs:

Darüber hinaus können URIs auch einschränkende Informationen enthalten.

Schritt 2: So rufen Sie Daten von einem Inhaltsanbieter ab

Obwohl der ContentResolver jetzt Zugriff auf die Datentabelle hat, kann er die erforderlichen Daten nur abrufen, wenn die Anwendung dies getan hat 'Lesezugriffsberechtigung' für diesen bestimmten Anbieter. Diese Berechtigung wird in der Manifestdatei jedes Inhaltsanbieters definiert.

All das eine Anwendung (der auf diese Datenbank zugreifen möchte) muss tun, um diese Erlaubnis anzufordern.

Wie bereits in diesem Android-Tutorial beschrieben, Mit einem Inhaltsanbieter können vier Vorgänge ausgeführt werden . Wir werden jeden nach dem anderen durchgehen.

Fragen

Jetzt haben Sie auf den Anbieter zugegriffen und haben die Berechtigung, Daten von ihm abzurufen. Der nächste Schritt ist zu Erstellen Sie die Abfrage, um die erforderliche Aktion vom Anbieter anzufordern .

Hier sind die Argumente, die beim Abfragen verwendet werden:

ein) HASS : Es funktioniert genau wie oben erklärt.

2) Projektion: Die Abfrage sollte Gibt eine Reihe von Spalten aus der gesamten Datenbanktabelle zurück . Dies wird als Projektion bezeichnet. Wenn Sie null übergeben, werden alle Spalten zurückgegeben, was ineffizient ist.

3) Auswahlklausel: ZU Filter, der angibt, welche Zeilen zurückgegeben werden sollen , formatiert als SQL WHERE-Klausel (ohne WHERE selbst). Wenn Sie null übergeben, werden alle Zeilen für den angegebenen URI zurückgegeben.

Wenn Sie beispielsweise ein Alphabet (z. B. 'P') in die Suchspalte Ihres Adressbuchs eingeben, werden alle Kontaktdaten beginnend mit 'P' zurückgegeben. Wenn Sie jedoch nichts in die Suchleiste eingeben, wird die vollständige Liste der Kontakte abgerufen (in solchen Fällen wird die Auswahlklausel auf 'null' gesetzt).

4) Auswahlargument: Sie können '? S' in die Auswahl aufnehmen, die durch die Werte von selectionArgs in der Reihenfolge ersetzt wird, in der sie in der Auswahl angezeigt werden.

5) Sortierung: SQL ORDER BY-Klausel (ohne ORDER BY selbst). Wenn Sie null übergeben, werden die möglicherweise ungeordneten Ergebnisse abgerufen.

CODE-BEISPIEL für die Abfrage:

  • Suchen nach Telefonnummern in Kontakten
Cursor 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) (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDoneK_ , neuer String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', Telefonnummer:' + phoneNo + ''} phoneCursor.close ()}}}

EINSATZ

Angenommen, Sie möchten neue Kontakte in Ihr Adressbuch einfügen. ContentValues-Objekt wird verwendet, um diese Einfügungen durchzuführen. Die ContentValue-Objektschlüssel und die Content Provider-Spalten müssen übereinstimmen, um dies zu erreichen. Hier ein Beispiel dafür:

CODE-BEISPIEL FÜR das Einfügen:

  • Die Operation besteht darin, einen neuen Eintrag mit dem Namen 'Rajnikant' und der Nummer '9988999888' einzufügen.
// Operation ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (CO) ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

AKTUALISIERUNG

Um einen Inhaltsanbieter zu aktualisieren, werden die folgenden Argumente verwendet:

ein) HASS: Die URI des Inhaltsanbieters

2) Inhaltswerte: Dies enthält die Werte, die die vorhandenen Daten ersetzen würden.

3) Auswahlklausel: Dies kann bei der Auswahl der zu aktualisierenden Datensätze hilfreich sein

4) Auswahlargument: Sie können '? S' in die Auswahl aufnehmen, die durch die Werte von selectionArgs in der Reihenfolge ersetzt wird, in der sie in der Auswahl angezeigt werden.

Wieder einmal die Die Schlüssel des ContentValues-Objekts müssen mit den Spalten im Inhaltsanbieter übereinstimmen Andernfalls würde das Update nicht stattfinden.

CODE-BEISPIEL FÜR die Aktualisierung:

  • Aktualisierung der Telefonnummer mit dem Namen 'Rajnikant'
Zeichenfolge where = 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)

STREICHUNG

Beim Löschen werden dieselben Argumente wie beim Aktualisieren verwendet, mit Ausnahme des ContentValues-Arguments, das nicht erforderlich ist, da keine ersetzten Werte vorhanden sind.

CODE-BEISPIEL ZUM Löschen:

  • Löschen Sie den Kontakt mit dem Namen 'Rajnikant'.
Zeichenfolge where = 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)

Im Falle eines Einfügevorgangs muss der URI verzeichnisbasiert sein. In allen anderen Fällen können die URIs entweder ID-basiert oder verzeichnisbasiert sein.

Wir hoffen Android-Tutorial für Anfänger: Teil 5 war nicht zu schwer zu verstehen! Wir werden mehr über Inhaltsanbieter in nachfolgenden Android-Tutorials diskutieren. Viel Spaß beim Erlernen der Grundlagen bis dahin!

Haben Sie Zweifel an diesem Android-Tutorial? Frag uns.

Viel Spaß beim Lernen!

Die folgenden Ressourcen wurden beim Erstellen dieses Android-Tutorials verwendet! Offizielle Android-Entwickler , Edureka.in

Diese verwandten Beiträge könnten Ihnen auch gefallen: