Was ist der Unterschied zwischen Contentprovider und contentResolver in Android?

Lesezeit: 4 Minuten

Benutzer-Avatar
Akshay Mukadam

Was ist der Unterschied zwischen Anbieter von Inhalten und ContentResolver? Ich möchte nicht für die SQLite Datenbank. Ich entwickle eine Anwendung für Medien.

  • das gleiche wie zwischen “bereitstellen” und “auflösen” … kurz: ContentProvider-Implementierung liefert einige Daten für eine Autorität … ContentResolver löst auf, welcher Anbieter (basierend auf Autorität) verwendet werden soll, und fragt diesen Anbieter nach Daten …

    – Selvin

    18. September 2013 um 14:27 Uhr


  • @Selvin FI möchte ein Programm für Wiedergabelisten erstellen, als ich denke, dass ich den Inhaltsanbieter erstellen muss. Bitte sagen Sie mir, wie wir unsere eigenen Inhaltsanbieter erstellen

    – Akshay Mukadam

    18. September 2013 um 14:50 Uhr


  • queception.com/question.php?question=107

    – Paketüberfluss

    6. August 2019 um 6:22 Uhr

  • Falls jemand von Ihnen über einige Netzwerkgrundlagen verfügt, ist ContentResolver analog zur Auflösung von Domänennamen, dh die Zuordnung von stackoverflow.com zu 151.101.129.69. Die Rolle von ContentResolver endet praktisch dort. ContentProvider stellt den Inhalt für eine bestimmte Anfrage bereit, z. B. das Bereitstellen des HTML für diese Frage „stackoverflow.com/questions/18874801“. Es ist wirklich nur eine Abstraktionsschicht zum Abfragen einer Datenbank, wobei die zugrunde liegende Implementierung ignoriert wird

    – Aswat

    2. Juni 2020 um 8:54 Uhr

Benutzer-Avatar
Benutzer1700184

Ich habe eine Erklärung gefunden hier. Zusammenfassend

Inhaltsauflöser löst einen URI in einen bestimmten auf Inhalt Anbieter.

Inhalt Anbieter bietet eine Schnittstelle zum Abfragen von Inhalten.

Der Weg, um einen Inhaltsanbieter abzufragen, ist contentResolverInstance.query(URI,.....)

  • > wenn ich meine playlist erstellen will als ob ich den contentprovider verwenden muss??

    – Akshay Mukadam

    18. September 2013 um 14:47 Uhr

  • Ja. Content Provider stellt den Inhalt einer Anwendung anderen Anwendungen zur Verfügung. Sie können es auch verwenden, um Daten von einem Webserver abzurufen.

    – Benutzer1700184

    18. September 2013 um 16:13 Uhr

  • Es ist eine gute Erklärung! Aber wenn der Autor “ContentProvider” zuerst erklärt hätte, hätte es mehr Sinn und Reihenfolge gegeben + mehr Verständnis! Jedenfalls! Es klärt die Idee für mich 🙂

    – Faizan Mubasher

    19. Januar 2014 um 14:15 Uhr

  • Nur um hinzuzufügen. ContentResolver wird besonders benötigt, wenn Sie auf “andere” Inhaltsanbieter zugreifen, um einen sicheren Zugriff zu haben. Wenn Sie einen eigenen Inhaltsanbieter haben, brauchen Sie ihn nicht zu verwenden.

    – stdout

    27. Juni 2016 um 12:07 Uhr

Benutzer-Avatar
Shiva Prakash

ContentProviders werden verwendet um die Datenbank von anderen Teilen zu abstrahieren und fungiert als Schnittstelle zwischen Ihrer Datenbank und UI/anderen Klassen. Sie müssen Ihren eigenen ContentProvider erstellen um Ihre App-Daten mit anderen Apps zu teilen.

ContentResolver wird verwendet, um den richtigen ContentProvider basierend auf auszuwählen ContentUris. So könnte ein ContentUri aussehen

content://com.android.contacts/contacts/3

  • Inhalt:// wird genannt planen und gibt an, dass es sich um einen ContentUri handelt.
  • com.android.contacts wird genannt Inhaltsautorität und ContentResolver verwendet es, um zu einem eindeutigen Anbieter (in diesem Fall ContactProvider) aufzulösen.
  • Kontakte ist der Weg die eine Teilmenge der Daten des Anbieters identifizieren (z. B. Tabellenname).
  • 3 ist der Ich würde Wird verwendet, um eine Zeile innerhalb der Teilmenge von Daten eindeutig zu identifizieren.

Geben Sie hier die Bildbeschreibung ein

HINWEIS: Auch Ihre eigene App kann diese Route verwenden, um mit ihren Daten umzugehen.

Sehen Inhaltsanbieter in Android für mehr Details

  • Die Anzahl der Upvotes zeigt an, dass diese Antwort die akzeptierte Antwort hätte sein sollen.

    – Der_Marsmensch

    29. Juli 2020 um 19:30 Uhr

  • Ja, diese Antwort ist klarer als die akzeptierte Antwort

    – Alu

    31. Oktober 2020 um 16:23 Uhr

Benutzer-Avatar
Rohit Singh

Zweischichtige Abstraktion:

ContentResolver –> ContentProvider –>SQLiteDatabase

Der Hauptunterschied besteht darin, wie in anderen Antworten erwähnt.

ContentProvider macht private Daten Ihrer Anwendung für externe Anwendungen verfügbar
während
ContentResolver stellt den richtigen ContentProvider unter allen ContentProvidern bereit, die einen URI verwenden.

Tieferes Verständnis (der zweischichtigen Abstraktion)

Machen wir einen Umweg.
Wir alle wissen, dass beim Erstellen einer SQLite-Datenbank die Datenbank für Ihre Anwendung privat bleibt, was bedeutet, dass Sie Ihre Anwendungsdaten einfach nicht mit anderen externen Anwendungen teilen können.

Wie werden Daten dann geteilt?

ContentProvider und ContentResolver sind Teil von android.content Paket. Diese beiden Klassen arbeiten zusammen, um ein robustes, sicheres Datenfreigabemodell zwischen Anwendungen bereitzustellen.
Inhalt Anbieter stellt in der SQLite-Datenbank gespeicherte Daten anderen Anwendungen zur Verfügung, ohne ihnen die zugrunde liegende Implementierung Ihrer Datenbank mitzuteilen.
Es abstrahiert also die SQliteDatabase. Aber warten Sie, es gibt einen Haken !!!
Die externe Anwendung kann nicht direkt auf ContentProvider zugreifen. Dazu müssen Sie zuerst mit einer anderen Klasse namens ContentResolver interagieren. Stellen Sie sich ContentResolver als ContentProvider-Finder vor. Es gibt nur eine Instanz davon und alle ContentProvider Ihres Geräts sind mit einem einfachen Namespace-URI registriert. Wenn Sie einen bestimmten ContentProvider erreichen möchten, müssen Sie nur dessen URI kennen. Übergeben Sie es an ContentResolver und es wird den Anbieter anhand des URI finden.
Werfen wir nun einen Blick auf die wichtigste Methode getContentResolver().query(URI,String[] proj.....)

Was passiert, wenn getContentResolver().query(URI,String[] proj.....) wird angerufen

query() -Methode gehört zur ContentResolver-Klasse, ruft jedoch die abstrakte query()-Methode des aufgelösten ContentProvider auf und gibt das Cursor-Objekt zurück.
Auf diese Weise wird die externe Anwendung über zwei Abstraktionsschichten der privaten Datenbank ausgesetzt.

Nur um weitere Punkte hinzuzufügen

Sie können keine eigene ContentResolver-Klasse erstellen, aber Sie können jederzeit Ihre eigene ContentProvider-Klasse erstellen

Hoffe du hast ein besseres Verständnis
Sie können auch Beispielcode sehen hier zum Erstellen von SQLitedatabase, ContentProvider usw., aber es ist nicht gut dokumentiert.

Benutzer-Avatar
Zafar Iqbal

2021 😀

Inhaltsauflöser : Für Datenanforderung

Inhalt Anbieter : Für Datenantwort

1157640cookie-checkWas ist der Unterschied zwischen Contentprovider und contentResolver in Android?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy