Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ContentProvider - The Good, the Bad and the Ugly

ContentProvider - The Good, the Bad and the Ugly

This is a presentation I held at the MobileTechCon 2013 conference in Berlin.

Wolfram Rittmeyer

September 04, 2013
Tweet

More Decks by Wolfram Rittmeyer

Other Decks in Programming

Transcript

  1. Basis für Datenaustausch „Content providers manage access to a structured

    set of data. They encapsulate the data, and provide mechanisms for defining data security. Content providers are the standard interface that connects data in one process with code running in another process.“
  2. Standard-Provider Name API-Level Wozu Browser 1 Websuchen, Bookmarks und Browser-Verlauf

    CalendarContract 14 Kalender und Termine CallLog 1 Telefonhistorie Contacts 1 Alter Provider für Kontakte. Deprecated! ContactsContract 5 Neuer Provider für Kontakte MediaStore 1 Alle Mediendaten wie Bilder, Musik, Videos UserDictionary 3 Nutzerwörterbuch
  3. Content URIs content://authority/pfad/id content://de.openminds.samples.cpsample.lentitems/items/15 Schema content fix Authority de.openminds. samples.cpsample.

    lentitems Eindeutig für einen Provider Pfad items Entspricht zumeist einer logischen Tabelle Id 15 Die ID eines konkreten Datensatzes
  4. Datensatz abfragen Nutzung der query()-Methode Argumente: Typ Name Bedeutung URI

    uri Die abzufragende URI String[] projection Die benötigten Spalten String selection Eine WHERE-Klausel String[] selectionArgs Binding-Parameter für das selection-Argument String sortorder Die ORDER BY-Klausel
  5. Pseudorelational Orientiert sich am relationalen Modell Aber: Nicht so mächtig

    Keine Joins, Unions, Limits Unions mit MergeCursor abbildbar
  6. Datensatz verändern Am Beispiel der update()-Methode insert() und delete()-Methoden analog

    Argumente: Typ Name Bedeutung URI uri Die zu verändernde URI ContentValues values Die benötigten Spalten String selection Eine WHERE-Klausel String[] selectionArgs Binding-Parameter für das selection-Argument
  7. Provider • Subklasse von ContentProvider erzeugen • Contract-Klasse erstellen •

    UriMatcher • CRUD Methoden implementieren • Optional: applyBatch() • Provider in AndroidManifest.xml eintragen
  8. Contract-Klasse Der Begriff Vertrag ist bewusst gewählt Definiert Zugriffskonstanten für

    Client Für jede logische Tabelle eine innere Klasse – Für jede Spalte eine Konstante – ContentURI-Konstante – ContentTypes-Konstanten
  9. Contract-Klasse Definieren Sie alles, was der Client braucht – Bspw.

    auch Intents – Notwendige Permissions Exportierte Struktur != reale Struktur Bieten Sie Joins an
  10. Daten freigeben Ermöglicht REST auf Android Zitat von Cyril Mottier

    auf Google+: „Uri are only here to fulfill the Android original leitmotiv: being able to share data from one process to another (usually via ContentProvider).“
  11. The Bad Nicht ausdrucksstark – Vor allem: keine Joins Permissions

    nur up-front – OAuth-Modell wünschenswert
  12. The Good Ideal für Datenaustausch Für Clients unverzichtbar Für Suchvorschläge

    notwendig Standardvorgehen in Android Gute Integration