Android-zelfstudies voor beginners Deel 4: inhoudsprovider



In deze Android-zelfstudie worden de concepten van de inhoudsprovider besproken. Het is een belangrijke bouwsteen van Android, die gegevensuitwisseling in Android-systemen mogelijk maakt.

In onze vorige Android-tutorials voor beginners hebben we de eerste drie bouwstenen van Android besproken: Activiteit , Intentie en Diensten . Dit artikel is de vierde in deze reeks Android-tutorials voor beginners en bespreekt de Content Provider, een ander zeer belangrijk onderdeel van het Android-systeem.

De inhoudsprovider is de tussenpersoon van uw Android-systeem en vergemakkelijkt gegevensuitwisseling tussen verschillende Android-applicaties. Laten we dieper ingaan op de details daarvan in deze Android-zelfstudie.





Android-zelfstudie voor beginners-4 Bonus: Download hier de code van de inhoudsprovider . Je zou deze code willen hebben als je de tutorial hebt doorlopen! :)

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



Android-zelfstudies: inhoudsprovider

Content Provider vergemakkelijkt de toegang tot een centrale datastore of -magazijn om gegevensuitwisseling en datamanipulatie tussen verschillende applicaties mogelijk te maken.

Hier zijn een paar voorbeelden van standaard inhoudsproviders in de API van het Android-systeem:

Android-zelfstudies: standaard inhoudsproviders in Android-systeem



Deze contentproviders laten de gebruiker abstraheren van een onderliggende database. Over het algemeen gebruiken inhoudsproviders SQLite om de onderliggende database op te slaan.

Laten we het altijd behulpzame voorbeeld nemen van de goede oude Facebook-applicatie, die ons ook heeft geholpen dingen te vereenvoudigen in eerdere Android-zelfstudies!

Jullie hebben allemaal op een bepaald punt in je sociale netwerkleven een foto geüpload naar je Facebook-tijdlijn, toch! Hoe doe je het?

Door op de fotoknop aan de muur te klikken, komt u in de fotogalerij. Van daaruit kunt u een foto kiezen om te uploaden.

Na het lezen van de vorige artikelen van Android Tutorials-serie , je weet van Activiteiten en Intenties, daarom weet je dat dit is wat er gebeurt:

Uw Facebook-muur is een 'ACTIVITEIT'. Als u op de fotoknop klikt, wordt een 'INTENT' doorgegeven, die de boodschap overbrengt en de 'CONTENT PROVIDER' (fotogalerij) wordt geopend. De foto is geüpload met behulp van een netwerkupload 'SERVICE'.

Bekijk deze live video om te zien hoe Content Provider werkt in uw Facebook-applicatie.

Waarom heeft het Android-systeem inhoudsproviders nodig?

De behoefte aan Content Providers ontstaat doordat de database die in de ene applicatie is aangemaakt niet zichtbaar is voor een tweede applicatie.

Het is eenvoudig om een ​​database te maken en op te slaan in verschillende applicaties met SQLite, maar het probleem is dit: een database in Android is privé voor de applicatie die deze maakt . Er is geen gemeenschappelijke opslagruimte in Android waartoe elke applicatie toegang heeft. Om verschillende applicaties een database te laten gebruiken, heeft het Android-systeem daarom een ​​interface nodig die een dergelijke gegevensuitwisseling tussen applicaties en processen mogelijk maakt. Dit is waar de contentprovider om de hoek komt kijken.

Heb ik echt een inhoudsprovider nodig?

1) Jij u hoeft geen eigen provider te ontwikkelen als u een privé-database wilt voor een bepaalde applicatie (deze database zou niet toegankelijk zijn voor andere applicaties dan degene die deze heeft gemaakt).

verschil tussen definitief definitief en definitief

2) Jij echter een aangepaste provider nodig hebben om aangepaste zoeksuggesties te geven in uw eigen applicatiesysteem.

3) U heeft ook een inhoudsprovider nodig om complexe gegevens van uw applicatie naar andere applicaties te kopiëren en te plakken.

Welke bewerkingen worden ondersteund door een inhoudsprovider?

Inhoudsproviders ondersteunen de volgende basisbewerkingen:

een) Opvragen: Doorzoekt de inhoudsprovider voor alle objecten op basis van de opgegeven URI.

2) Verwijderen: Verwijdert de opgegeven objecten uit de database van een inhoudsprovider.

3) Bijwerken: Maakt updates aan de objecten in de database.

4) Invoegen: Voegt een nieuw object in de database in.

Stappen om een ​​bewerking uit te voeren in Content Provider

Stap 1: Toegang krijgen tot een inhoudsprovider

ContentResolver-clientobject wordt gebruikt om toegang te krijgen tot gegevens van de Content Provider. Het communiceert met het providerobject, dat op zijn beurt het verzoek om toegang tot gegevens accepteert en de gewenste resultaten retourneert. De gegevensuitwisselingsinterface die wordt geboden door de provider en het clientobject van de provider maakt communicatie tussen verschillende processen / toepassingen mogelijk.

De applicatie die toegang moet hebben tot de database, moet dit aangeven en toestemming vragen in zijn manifestbestand. Dit zou in detail worden besproken in onze volgende Android-tutorials.

bestanden overbrengen naar ec2 linux-instantie

Inhouds-URI

Inhouds-URI is een van de argumenten die worden gebruikt om de gegevens in een provider te identificeren. Het bestaat uit vier delen:

een) Regeling: Het schema voor content provider heeft een constante waarde: “content”.

2) Gezag: Het is de symbolische naam van de provider en is uniek voor elke provider. Dit is hoe we de gewenste contentprovider uit een lijst met zo veel mogelijk maken.

3) Pad: Pad helpt om de benodigde gegevens te onderscheiden van de volledige database . De aanbieder van de inhoud van het oproeplog maakt bijvoorbeeld via verschillende paden onderscheid tussen gemiste oproepen, ontvangen oproepen enz.

4) ID KAART: Het is geen verplicht onderdeel en is mogelijk niet aanwezig in de URI, maar indien aanwezig, moet het numeriek zijn. Bijvoorbeeld, Als u toegang wilt tot een specifiek muziekbestand van uw Media Content Provider, moet u ook een ID opgeven .

Het proces

Met behulp van de provider-autoriteit identificeert de ContentResolver de juiste contentprovider (aangezien de autoriteit uniek is voor elke content-provider). Daarna wordt de padcomponent van URI gebruikt om de juiste (aangevraagde) gegevenstabel te selecteren. Als er een ID aanwezig is, weet de provider welke exacte gegevens worden gevraagd.

Er zijn twee soorten URI's:

Bovendien kunnen URI's ook beperkende informatie bevatten.

Stap 2: Gegevens opvragen bij een inhoudsprovider

Hoewel de ContentResolver nu toegang heeft tot de gegevenstabel, kan deze de vereiste gegevens niet ophalen, tenzij de toepassing dat heeft 'Toestemming voor leestoegang' voor die specifieke provider. Deze toestemming wordt gedefinieerd in het manifestbestand van elke inhoudsprovider.

Dat alles een applicatie (die toegang wil tot deze database) hoeft te doen is om deze toestemming te vragen.

Zoals eerder in deze Android-tutorial besproken, vier bewerkingen kunnen worden uitgevoerd met behulp van een inhoudsprovider . We zullen ze een voor een bespreken.

VRAAG

Nu hebt u toegang tot de provider gekregen en hebt u toestemming om er gegevens uit op te halen. De volgende stap is om construeer de query om de vereiste actie van de provider op te vragen .

Hier zijn de argumenten die worden gebruikt bij het zoeken naar:

een) EEN HEKEL HEBBEN AAN : Het werkt precies zoals hierboven uitgelegd.

2) Projectie: De vraag zou moeten retourneer een set kolommen uit de volledige databasetabel . Dit staat bekend als projectie. Als u null doorgeeft, worden alle kolommen geretourneerd, wat inefficiënt is.

3) Selectieclausule: NAAR filter dat aangeeft welke rijen moeten worden geretourneerd , geformatteerd als een SQL WHERE-clausule (met uitzondering van de WHERE zelf). Als u null doorgeeft, worden alle rijen voor de opgegeven URI geretourneerd.

Als u bijvoorbeeld een alfabet invoert (zeg ‘P’) in de zoekkolom van uw adresboek, worden alle contactgegevens die beginnen met ‘P’ geretourneerd. Als u echter niets in de zoekbalk invoert, wordt de volledige lijst met contacten opgehaald (de selectieclausule wordt in dergelijke gevallen op ‘null’ ingesteld).

4) Selectieargument: U kunt '? S' in de selectie opnemen, die zullen worden vervangen door de waarden van selectionArgs, in de volgorde waarin ze in de selectie verschijnen.

5) Sorteervolgorde: SQL ORDER BY-clausule (met uitzondering van de ORDER BY zelf). Als u null doorgeeft, worden de resultaten opgehaald die mogelijk ongeordend zijn.

CODE VOORBEELD voor zoekopdrachten:

  • Zoeken naar telefoonnummers in Contacten
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) Stringnaam = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = Geheel getal.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 + '=' = ') , nieuwe String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Naam:' + naam + ', Telefoonnummer:' + phoneNo + ''} phoneCursor.close ()}}}

INVOEGING

Stel dat u nieuwe contacten aan uw adresboek wilt toevoegen. ContentValues-object wordt gebruikt om deze invoegingen uit te voeren. De ContentValue-objectsleutels en de Content Provider-kolommen moeten overeenkomen om dit te bereiken. Hier is een voorbeeld hiervan:

CODEVOORBEELD VOOR Invoegen:

  • De bewerking is om een ​​nieuw item in te voegen met de naam ‘Rajnikant’ en het nummer ‘9988999888’
// Operatie ArrayList ops = nieuwe ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCOUNT_NAME, null). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue (Data.MIMETYPE, StructuredName. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone. 9988.NUMBERY). , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

BIJWERKEN

Om een ​​inhoudsprovider bij te werken, worden de volgende argumenten gebruikt:

een) EEN HEKEL HEBBEN AAN: De URI van de inhoudsprovider

2) Inhoud Waarden: Dit bevat de waarden die de bestaande gegevens zouden vervangen.

3) Selectieclausule: Dit kan helpen bij het selecteren van de specifieke records die moeten worden bijgewerkt

4) Selectieargument: U kunt '? S' in de selectie opnemen, die zullen worden vervangen door de waarden van selectionArgs, in de volgorde waarin ze in de selectie verschijnen.

Nogmaals, de sleutels van het ContentValues-object moeten overeenkomen met de kolommen in de Content Provider anders zou de update niet plaatsvinden.

CODE VOORBEELD VOOR Update:

  • Het telefoonnummer bijwerken met de naam ‘Rajnikant’
Tekenreeks waar = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = nieuwe String [] {“Rajnikant”} ArrayList ops = nieuwe ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (where, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, '9876543210') .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

VERWIJDERING

Bij het verwijderen worden dezelfde argumenten gebruikt als bij het bijwerken, met uitzondering van het argument ContentValues, dat niet vereist is omdat er geen vervangende waarden zullen zijn.

CODE VOORBEELD VOOR Verwijderen:

  • Verwijder het contact waarvan de naam ‘Rajnikant’ is
Tekenreeks waar = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = nieuwe String [] {“Rajnikant”} ArrayList ops = nieuwe ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

In het geval van een Insert-bewerking, moet de URI op een directory zijn gebaseerd. In alle andere gevallen kunnen de URI's op een ID of op een directory zijn gebaseerd.

Wij hopen Android-tutorial voor beginners: deel 5 was niet zo moeilijk te begrijpen! We zullen meer bespreken over inhoudsproviders in latere Android-zelfstudies. Veel plezier met het leren van de basis tot dan!

passeren door verwijzing in java

Twijfel je over deze Android-tutorial? Vraag ons.

Veel plezier met leren!

De volgende bronnen zijn gebruikt bij het maken van deze Android-zelfstudie! Officiële Android-ontwikkelaars , Edureka.in

Misschien vind je deze gerelateerde berichten ook leuk: