Android-veiledninger for nybegynnere Del 4: Innholdsleverandør



Denne Android-veiledningen diskuterer konsepter for innholdsleverandører. Det er en viktig byggestein for Android, som letter datautveksling i Android-systemet.

I våre tidligere Android-veiledninger for nybegynnere diskuterte vi de tre første byggesteinene i Android: Aktivitet , Hensikt og Tjenester . Denne artikkelen er fjerde i denne serien av Android-opplæringsprogrammer for nybegynnere og diskuterer Content Provider, som er en annen veldig viktig komponent i Android-systemet.

Content Provider er mellommann på Android-systemet ditt, og letter datautveksling mellom forskjellige Android-applikasjoner. La oss komme litt inn i detaljene om det i denne Android-opplæringen.





Android-veiledning for nybegynnere-4-bonus: Last ned kode for innholdsleverandør her . Du vil ha denne koden når du har gått gjennom opplæringen! :)

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



javascript lengde på en matrise

Android-veiledninger: Innholdsleverandør

Content Provider muliggjør tilgang til et sentralt datalager eller lager for å tillate datadeling og datamanipulering på tvers av forskjellige applikasjoner.

Her er noen eksempler på standardinnholdsleverandører i Android-systemets API:

Android-opplæringsprogrammer: Standard innholdsleverandører i Android-systemet



Disse innholdsleverandørene tillater brukerabstraksjon fra en underliggende database. Vanligvis bruker innholdsleverandører SQLite til å lagre underliggende database.

La oss ta det stadig nyttige eksemplet på den gode gamle Facebook-applikasjonen, som har hjulpet oss med å forenkle ting i tidligere Android-opplæringer også!

Alle har du på et tidspunkt i ditt sosiale nettverk, lastet opp et bilde til Facebook-tidslinjen din, ikke sant! Hvordan gjør du det?

Når du klikker på Foto-knappen på veggen, kommer du til fotogalleriet. Derfra kan du velge et bilde du vil laste opp.

Etter å ha lest de tidligere artiklene fra Android Tutorials-serie , du vet om aktiviteter og intensjoner, derfor vet du at dette er hva som skjer:

Facebook-veggen din er en “AKTIVITET”. Når du klikker på fotoknappen, sendes en “INTENT” som formidler meldingen og “CONTENT PROVIDER” (Photo Gallery) åpnes. Bildet lastes opp ved hjelp av nettverksopplastingen 'SERVICE'.

Se denne live videoen for å vite hvordan Content Provider fungerer i Facebook-applikasjonen din.

Hvorfor trenger Android System innholdsleverandører?

Behovet for innholdsleverandører oppstår fordi databasen som er opprettet i en applikasjon ikke er synlig for en annen applikasjon.

Det er enkelt å opprette og lagre database i forskjellige applikasjoner ved hjelp av SQLite, men problemet er dette, en database i Android er privat for applikasjonen som oppretter den . Det er ikke noe vanlig lagringsområde i Android som alle applikasjoner har tilgang til. Derfor, for at forskjellige applikasjoner skal kunne bruke en database, trenger Android-systemet et grensesnitt som tillater slik inter-applikasjon og inter-prosess datautveksling. Dette er hvor innholdsleverandøren kommer til å spille.

Trenger jeg virkelig en innholdsleverandør?

1) Du trenger ikke å utvikle din egen leverandør hvis du ønsker en privat database for et bestemt program (denne databasen vil ikke være tilgjengelig for andre applikasjoner enn den som opprettet den).

2) Du imidlertid trenger en tilpasset leverandør for å gi forslag til tilpassede søk i ditt eget applikasjonssystem.

3) Du trenger også en innholdsleverandør for å kopiere og lime inn komplekse data fra applikasjonen din til andre applikasjoner.

Hva støttes av en innholdsleverandør?

Innholdsleverandører støtter følgende grunnleggende operasjoner:

en) Spørring: Spørrer innholdsleverandøren for alle objektene, basert på den angitte URI.

2) Slett: Sletter de angitte objektene fra databasen til en innholdsleverandør.

3) Oppdater: Gjør oppdateringer til objektene i databasen.

4) Sett inn: Setter inn nytt objekt i databasen.

Fremgangsmåte for å utføre en operasjon i Content Provider

Trinn 1: Få tilgang til en innholdsleverandør

ContentResolver klientobjekt brukes til å få tilgang til data fra innholdsleverandøren. Den kommuniserer med leverandørobjektet, som igjen godtar forespørselen om å få tilgang til data og returnerer de ønskede resultatene. Datautvekslingsgrensesnittet som tilbys av leverandøren og leverandørens klientobjekt tillater kommunikasjon på tvers av forskjellige prosesser / applikasjoner.

Programmet som trenger tilgang til databasen må erklære dette og be om tillatelse i manifestfilen. Dette vil bli diskutert i detalj i de påfølgende Android-opplæringene.

Innhold URI

Content URI er et av argumentene som brukes til å identifisere dataene i en leverandør. Den har fire deler:

en) Ordning: Ordningen for innholdsleverandør har en konstant verdi: “innhold”.

2) Autoritet: Det er det symbolske navnet på leverandøren, og er unikt for hver enkelt. Slik skiller vi ut ønsket innholdsleverandør fra en liste over så mange.

3) Sti: Sti hjelper til med å skille de nødvendige dataene fra den komplette databasen . For eksempel skiller innholdsleverandøren av anropsloggen mellom tapte anrop, mottatte anrop etc. ved hjelp av forskjellige baner.

4) ID: Det er ikke en obligatorisk komponent, og kan ikke være til stede i URI, men hvis den er til stede, bør den være numerisk. For eksempel, Hvis du vil ha tilgang til en bestemt musikkfil fra leverandøren av medieinnhold, vil du også spesifisere en ID .

Prosessen

Ved å bruke leverandørmyndigheten identifiserer ContentResolver riktig innholdsleverandør (da autoritet er unik for hver innholdsleverandør). Etter å ha gjort det, brukes banekomponenten i URI til å velge riktig (forespurt) datatabell. I tilfelle en ID er til stede, vil leverandøren vite hvilke eksakte data som blir bedt om.

URI er av to typer:

I tillegg kan URI-er også ha begrensende informasjon.

Trinn 2: Hvordan hente data fra en innholdsleverandør

Selv om ContentResolver har tilgang til datatabellen nå, kan den ikke hente de nødvendige dataene med mindre applikasjonen har det “Lesetilgangstillatelse” for den aktuelle leverandøren. Denne tillatelsen er definert i manifestfilen til hver innholdsleverandør.

Alt dette en applikasjon (som ønsker tilgang til denne databasen) må gjøre er å be om denne tillatelsen.

Nå som diskutert tidligere i denne Android-opplæringen, fire operasjoner kan utføres ved hjelp av en innholdsleverandør . Vi vil gå over hver og en.

SPØRSMÅL

Nå har du fått tilgang til leverandøren og har tillatelse til å hente data fra den. Det neste trinnet er å konstruer spørringen for å be om den nødvendige handlingen fra leverandøren .

Her er argumentene som brukes når du spør:

en) HAT : Det fungerer nøyaktig som forklart ovenfor.

2) Projeksjon: Spørringen skal returner et sett med kolonner fra hele databasetabellen . Dette er kjent som projeksjon. Hvis du sender null, returneres alle kolonnene, noe som er ineffektivt.

3) Utvalgsklausul: TIL filter som erklærer hvilke rader du vil returnere , formatert som en SQL WHERE-ledd (unntatt selve WHERE). Ved å passere null returneres alle radene for den gitte URI.

Hvis du for eksempel skriver inn et alfabet (si 'P') i søkekolonnen i adresseboken din, vil det returnere alle kontaktdetaljene som begynner med 'P'. Imidlertid, hvis du ikke legger inn noe i søkefeltet, blir den komplette listen over kontakter hentet (valgklausulen er satt til 'null' i slike tilfeller).

4) Utvalg Argument: Du kan inkludere “? S” i utvalget, som vil bli erstattet av verdiene fra selectionArgs, i den rekkefølgen de vises i utvalget.

5) Sorteringsrekkefølge: SQL ORDER BY-ledd (unntatt selve ORDER BY). Hvis du sender null, får du resultatene som kan være uordnet.

KODEEKSEMPEL for spørring:

  • Søker etter telefonnumre i Kontakter
Markør markør = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { Streng 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 = IncentCparnt (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 ()}}}

INNSETTING

La oss anta at du vil sette inn nye kontakter i adresseboken din. ContentValues-objekt brukes til å gjøre disse innsettingene. ContentValue-objektnøklene og innholdsleverandørkolonnene må samsvare for å oppnå dette. Her er et eksempel på dette:

KODEEKSEMPEL FOR INSETTING:

  • Operasjonen er å sette inn ny oppføring med navnet “Rajnikant” og nummeret “9988999888”
// Operasjon 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) .withValue8 (Phone.NUM). , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

OPPDATERING

For å oppdatere en innholdsleverandør brukes følgende argumenter:

en) HAT: URI til innholdsleverandøren

2) ContentValues: Dette inneholder verdiene som vil erstatte eksisterende data.

3) Utvalgsklausul: Dette kan hjelpe til med å velge de spesifikke postene som skal oppdateres

4) Utvalg Argument: Du kan inkludere “? S” i utvalget, som vil bli erstattet av verdiene fra selectionArgs, i den rekkefølgen de vises i utvalget.

Nok en gang, den nøklene til ContentValues-objektet må samsvare med kolonnene i innholdsleverandøren Ellers ville ikke oppdateringen forekomme.

KODEEKSEMPEL FOR OPPDATERING:

  • Oppdaterer telefonnummeret der 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)

SLETTING

Sletting bruker de samme argumentene som oppdatering med unntak av ContentValues-argumentet, som ikke er nødvendig, da det ikke vil være noen erstatningsverdier.

KODEEKSEMPEL FOR SLETTING:

  • Slett kontakten der 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)

Ved innsettingsoperasjon må URI være katalogbasert. I alle de andre tilfellene kan URI-ene være enten ID-baserte eller katalogbaserte.

Vi håper Android-opplæring for nybegynnere: Del 5 var ikke så vanskelig å forstå! Vi skal diskutere mer om innholdsleverandører i påfølgende Android-veiledninger. Kos deg med å lære det grunnleggende til da!

Er du i tvil i denne Android-opplæringen? Spør oss.

Glad læring!

Følgende ressurser ble brukt til å lage denne Android-veiledningen! Offisielle Android-utviklere , Edureka.in

Du kan også like disse relaterte innleggene: