Android-vejledninger til begyndere, del 4: Indholdsudbyder



Denne Android-tutorial diskuterer indholdsudbyderkoncepter. Det er en vigtig byggesten i Android, der letter dataudveksling i Android-systemet.

I vores tidligere Android-tutorials til begyndere diskuterede vi de første tre byggesten i Android: Aktivitet , Hensigt og Tjenester . Denne artikel er fjerde i denne serie af Android-tutorials til begyndere og diskuterer indholdsudbyderen, som er en anden meget vigtig komponent i Android-systemet.

Content Provider er dit Android-systems mellemmand, der letter dataudveksling mellem forskellige Android-applikationer. Lad os komme lidt nærmere ind på det i denne Android-tutorial.





Android-tutorial til begyndere-4-bonus: Download indholdsudbyderkode her . Du vil have denne kode, når du har gennemgået vejledningen! :)

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



Android-vejledninger: Indholdsudbyder

Content Provider letter adgang til et centralt datalager eller lager for at muliggøre datadeling og datamanipulation på tværs af forskellige applikationer.

Her er et par eksempler på standardindholdsudbydere i Android-systemets API:

Android-tutorials: Standardindholdsudbydere i Android-systemet



Disse indholdsudbydere tillader brugerabstraktion fra en underliggende database. Generelt bruger indholdsudbydere SQLite til at gemme den underliggende database.

Lad os tage det stadigt nyttige eksempel på den gode gamle Facebook-applikation, der også har hjulpet os med at forenkle ting i tidligere Android-tutorials!

Alle har på et eller andet tidspunkt i dit sociale netværksliv uploadet et billede til din Facebook-tidslinje, ikke sandt! Hvordan gør du det?

Når du klikker på knappen Foto på væggen, kommer du til fotogalleriet. Derfra kan du vælge et foto, der skal uploades.

Efter at have læst de tidligere artikler fra Android Tutorials-serie , du kender til aktiviteter og hensigter, derfor ved du, at dette er hvad der sker:

Din Facebook-væg er en 'AKTIVITET'. Når du klikker på fotoknappen, sendes en “INTENT”, der formidler meddelelsen, og “CONTENT PROVIDER” (Photo Gallery) åbnes. Billedet uploades ved hjælp af en netværksupload 'SERVICE'.

Se denne live video for at vide, hvordan Content Provider fungerer i din Facebook-applikation.

Hvorfor har Android System brug for indholdsudbydere?

Behovet for indholdsudbydere opstår, fordi databasen oprettet i en applikation ikke er synlig for en anden applikation.

Det er simpelt at oprette og gemme database i forskellige applikationer ved hjælp af SQLite, men problemet er dette, en database i Android er privat for den applikation, der opretter den . Der er ikke noget fælles lagerområde i Android, som alle applikationer har adgang til. Derfor, for at forskellige applikationer kan bruge en database, har Android-systemet brug for en grænseflade, der tillader sådan inter-applikation og inter-proces dataudveksling. Det er her indholdsudbyderen kommer til at spille.

Har jeg virkelig brug for en indholdsudbyder?

1) Dig behøver ikke at udvikle din egen udbyder, hvis du vil have en privat database for en bestemt applikation (denne database ville ikke være tilgængelig for andre applikationer end den, der oprettede den).

2) Du dog har brug for en brugerdefineret udbyder til at levere tilpassede søgeforslag i dit eget applikationssystem.

3) Du har også brug for en indholdsudbyder til at kopiere og indsætte komplekse data fra din applikation til andre applikationer.

Hvad understøttes af en indholdsudbyder?

Indholdsudbydere understøtter følgende grundlæggende operationer:

hvad er et navneområde c ++

en) Forespørgsel: Forespørger indholdsudbyderen om alle objekterne baseret på den angivne URI.

hvordan man konverterer et tal til binært i python

2) Slet: Sletter de angivne objekter fra databasen til en indholdsudbyder.

3) Opdatering: Foretager opdateringer til objekterne i databasen.

4) Indsæt: Indsætter nyt objekt i databasen.

Trin til at udføre en operation i Content Provider

Trin 1: Adgang til en indholdsudbyder

ContentResolver-klientobjekt bruges til at få adgang til data fra indholdsudbyderen. Det kommunikerer med udbyderobjekt, som igen accepterer anmodningen om at få adgang til data og returnerer de ønskede resultater. Dataudvekslingsgrænsefladen leveret af udbyderen og udbyderens klientobjekt tillader kommunikation på tværs af forskellige processer / applikationer.

Den applikation, der skal have adgang til databasen, skal erklære dette og anmode om tilladelser i sin manifestfil. Dette ville blive diskuteret detaljeret i vores efterfølgende Android-tutorials.

Indholds-URI

Content URI er et af de argumenter, der bruges til at identificere dataene i en udbyder. Den har fire dele:

en) Ordning: Ordningen for indholdsudbyder har en konstant værdi: “indhold”.

2) Myndighed: Det er det symbolske navn på udbyderen og er unikt for hver enkelt. Dette er hvordan vi udpeger den ønskede indholdsudbyder fra en liste med så mange.

3) Sti: Sti hjælper med at skelne de krævede data fra den komplette database . For eksempel skelner udbyderen af ​​opkaldslogindhold mellem ubesvarede opkald, modtagne opkald osv. Ved hjælp af forskellige stier.

4) ID: Det er ikke en obligatorisk komponent og er muligvis ikke til stede i URI, men hvis den er til stede, skal den være numerisk. For eksempel, Hvis du vil have adgang til en bestemt musikfil fra din medieindholdsudbyder, skal du også angive et id .

Processen

Ved hjælp af udbydermyndigheden identificerer ContentResolver den korrekte indholdsudbyder (da autoritet er unik for hver indholdsudbyder). Efter at have gjort det, bruges stykomponenten i URI til at vælge den korrekte (anmodede) datatabel. Hvis et ID er til stede, ville udbyderen vide, hvilke nøjagtige data der anmodes om.

URI'er er af to typer:

Derudover kan URI'er også have begrænsende oplysninger.

Trin 2: Sådan hentes data fra en indholdsudbyder

Selvom ContentResolver nu har adgang til datatabellen, kan den ikke hente de krævede data, medmindre applikationen har det “Læseadgangstilladelse” for den pågældende udbyder. Denne tilladelse er defineret i manifestfilen for hver indholdsudbyder.

Alt dette en applikation (der ønsker at få adgang til denne database) skal gøre er at anmode om denne tilladelse.

Nu som diskuteret tidligere i denne Android-tutorial, fire operationer kan udføres ved hjælp af en indholdsudbyder . Vi vil gå over hver enkelt efter én.

FORESPØRGSEL

Nu har du adgang til udbyderen og har tilladelse til at hente data fra den. Det næste trin er at konstruer forespørgslen for at anmode om den nødvendige handling fra udbyderen .

Her er de argumenter, der blev brugt under forespørgsel:

en) HAD : Det fungerer nøjagtigt som forklaret ovenfor.

2) Fremskrivning: Forespørgslen skal returnere et sæt kolonner fra hele databasetabellen . Dette er kendt som projektion. Ved at videregive null returneres alle kolonner, hvilket er ineffektivt.

3) Udvælgelsesklausul: TIL filter, der angiver, hvilke rækker der skal returneres , formateret som en SQL WHERE-klausul (undtagen selve WHERE). Ved at passere null returneres alle rækker for den givne URI.

For eksempel, hvis du indtaster et alfabet (sig 'P') i søgekolonnen i din adressebog, vil det returnere alle kontaktoplysninger startende med 'P'. Men hvis du ikke indtaster noget i søgefeltet, hentes den komplette liste over kontakter (valgklausulen er i sådanne tilfælde indstillet til 'null').

Fibonacci algoritme c ++

4) Udvælgelsesargument: Du kan medtage “? S” i markeringen, som erstattes af værdierne fra selectionArgs, i den rækkefølge, de vises i markeringen.

5) Sorteringsrækkefølge: SQL ORDER BY-klausul (eksklusive selve ORDER BY). Hvis du videregiver null, hentes de resultater, der muligvis ikke er ordnet.

KODEEKSEMPEL til forespørgsel:

  • Søgning efter telefonnumre i Kontakter
Markør 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 = InparCent = antal. (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) hvis (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.Chone.CONT. , ny streng [] {id}, null) mens (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Navn:' + navn + ', Telefonnummer:' + phoneNo + ''} phoneCursor.close ()}}}

INDSKUD

Lad os antage, at du vil indsætte nye kontakter i din adressebog. ContentValues-objekt bruges til at udføre disse indsættelser. ContentValue-objektnøglerne og kolonnerne til indholdsudbyderen skal matche for at opnå dette. Her er et eksempel på dette:

KODEEKSEMPEL TIL indsættelse:

  • Operationen er at indsætte ny post med navnet “Rajnikant” og nummeret “9988999888”
// Operation ArrayList ops = ny ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCO.) ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUM). , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

OPDATERING

For at opdatere en indholdsudbyder anvendes følgende argumenter:

en) HAD: Indholdsudbyderens URI

2) ContentValues: Dette indeholder de værdier, der ville erstatte de eksisterende data.

3) Udvælgelsesklausul: Dette kan hjælpe med at vælge de specifikke poster, der skal opdateres

4) Udvælgelsesargument: Du kan medtage “? S” i markeringen, som erstattes af værdierne fra selectionArgs, i den rækkefølge, de vises i markeringen.

Endnu en gang nøgler til ContentValues-objektet skal matche kolonnerne i indholdsudbyderen Ellers ville opdateringen ikke forekomme.

KODEEKSEMPEL TIL Opdatering:

  • Opdatering af telefonnummeret, hvor navnet er “Rajnikant”
Streng hvor = 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. Telefon.NUMBER, “9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

SLETNING

Sletning bruger de samme argumenter som opdatering med undtagelse af ContentValues-argumentet, hvilket ikke er nødvendigt, da der ikke vil være nogen substituerede værdier.

KODEEKSEMPEL TIL Sletning:

  • Slet kontakten, hvor navnet er “Rajnikant”
Streng hvor = 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)

I tilfælde af indsættelse skal URI være biblioteksbaseret. I alle andre tilfælde kan URI'erne enten være ID-baserede eller biblioteksbaserede.

Vi håber Android-tutorial til begyndere: Del 5 var ikke for svært at forstå! Vi diskuterer mere om indholdsudbydere i efterfølgende Android-vejledninger. Nyd at lære det grundlæggende indtil da!

Er du i tvivl i denne Android-tutorial? Spørg os.

Glad læring!

Følgende ressourcer blev brugt til oprettelse af denne Android-tutorial! Officielle Android-udviklere , Edureka.in

Du kan muligvis også lide disse relaterede indlæg: