Android-handledning för nybörjare Del-4: Innehållsleverantör



Denna Android-handledning diskuterar innehållsleverantörskoncept. Det är en viktig byggsten för Android, vilket underlättar datautbyte i Android-systemet.

I våra tidigare Android-tutorials för nybörjare diskuterade vi de tre första byggstenarna i Android: Aktivitet , Avsikt och Tjänster . Den här artikeln är fjärde i denna serie av Android-självstudier för nybörjare och diskuterar innehållsleverantör, vilket är en annan mycket viktig komponent i Android-systemet.

Innehållsleverantören är ditt Android-systems mellanhand, vilket underlättar datautbyte mellan olika Android-applikationer. Låt oss gå in på detaljerna i den här Android-självstudien.





Android-handledning för nybörjare-4-bonus: Ladda ner kod för innehållsleverantör här . Du vill ha den här koden när du har gått igenom handledningen! :)

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



Android-handledning: Innehållsleverantör

Innehållsleverantör underlättar åtkomst till en central datalager eller lager för att möjliggöra datadelning och datahantering över olika applikationer.

Här är några exempel på standardinnehållsleverantörer i Android-systemets API:

Android-handledning: Standardleverantörer av innehåll i Android-systemet



Dessa innehållsleverantörer tillåter användarens abstraktion från en underliggande databas. Generellt använder innehållsleverantörer SQLite för att lagra underliggande databas.

Låt oss ta det ständigt hjälpsamma exemplet på den gamla gamla Facebook-applikationen, som har hjälpt oss att förenkla saker i tidigare Android-självstudier också!

Alla har någon gång i ditt sociala nätverksliv laddat upp en bild till din Facebook-tidslinje, eller hur! Hur gör du det?

När du klickar på fotoknappen på väggen kommer du till fotogalleriet. Därifrån kan du välja ett foto att ladda upp.

Efter att ha läst de tidigare artiklarna från Android-handledningsserie , du vet om aktiviteter och avsikter därför, du vet att det här är vad som händer:

Din Facebook-vägg är en ”AKTIVITET”. När du klickar på fotoknappen skickas en 'INTENT' som förmedlar meddelandet och 'CONTENT PROVIDER' (Photo Gallery) öppnas. Fotoet laddas upp med hjälp av en nätverksuppladdning 'SERVICE'.

Titta på den här livevideoen för att veta hur innehållsleverantören fungerar i din Facebook-applikation.

Varför behöver Android-system innehållsleverantörer?

Behovet av innehållsleverantörer uppstår eftersom databasen som skapas i en applikation inte är synlig för en andra applikation.

Det är enkelt att skapa och lagra databas i olika applikationer med SQLite, men problemet är detta, en databas i Android är privat för den applikation som skapar den . Det finns inget vanligt lagringsområde i Android som alla applikationer kan komma åt. Därför, för att olika applikationer ska kunna använda en databas, behöver Android-systemet ett gränssnitt som möjliggör sådant datautbyte mellan applikationer och mellan processer. Det är här innehållsleverantören kommer att spela.

Behöver jag verkligen en innehållsleverantör?

1) Du behöver inte utveckla din egen leverantör om du vill ha en privat databas för en viss applikation (denna databas skulle inte vara tillgänglig för andra applikationer än den som skapade den).

2) Du dock behöver en anpassad leverantör för att tillhandahålla anpassade sökförslag i ditt eget applikationssystem.

3) Du skulle också behöva en innehållsleverantör för att kopiera och klistra in komplexa data från din applikation till andra applikationer.

Vilka funktioner stöds av en innehållsleverantör?

Innehållsleverantörer stöder följande grundläggande operationer:

hur man ställer in Java-sökväg i Windows

ett) Fråga: Frågar innehållsleverantören för alla objekt, baserat på den angivna URI.

2) Radera: Tar bort de angivna objekten från en innehållsleverantörs databas.

3) Uppdatering: Gör uppdateringar av objekten i databasen.

4) Föra in: Infogar nytt objekt i databasen.

Steg för att utföra en operation i innehållsleverantören

Steg 1: Åtkomst till en innehållsleverantör

ContentResolver-klientobjekt används för att komma åt data från innehållsleverantören. Den kommunicerar med leverantörsobjekt, vilket i sin tur accepterar begäran om åtkomst till data och returnerar önskat resultat. Datautbytesgränssnittet som tillhandahålls av leverantören och leverantörens klientobjekt tillåter kommunikation mellan olika processer / applikationer.

Programmet som behöver komma åt databasen måste deklarera detta och begära behörighet i sin manifestfil. Detta skulle diskuteras i detalj i våra efterföljande Android-handledning.

Innehålls URI

Content URI är ett av argumenten som används för att identifiera data i en leverantör. Den har fyra delar:

ett) Schema: Schemat för innehållsleverantören har ett konstant värde: “innehåll”.

2) Auktoritet: Det är leverantörens symboliska namn och är unikt för var och en. Så här markerar vi den önskade innehållsleverantören från en lista med så många.

3) Väg: Väg hjälper till att särskilja nödvändiga data från hela databasen . Exempelvis skiljer leverantören av samtalslogginnehåll mellan missade samtal, mottagna samtal etc. med olika sökvägar.

4) ID: Det är inte en obligatorisk komponent och kanske inte finns i URI men om den finns bör den vara numerisk. Till exempel, om du vill komma åt en specifik musikfil från din medieinnehållsleverantör, skulle du också ange ett ID .

Processen

Med hjälp av leverantörens myndighet identifierar ContentResolver rätt innehållsleverantör (eftersom myndigheten är unik för varje innehållsleverantör). Efter att ha gjort det används sökkomponenten i URI för att välja rätt (begärd) datatabell. Om ett ID finns, skulle leverantören veta exakt vilka uppgifter som begärs.

URI är av två typer:

Dessutom kan URI också ha begränsande information.

Steg 2: Hur man hämtar data från en innehållsleverantör

Även om ContentResolver har åtkomst till datatabellen nu kan den inte hämta nödvändiga data om inte applikationen har “Läsbehörighet” för just den leverantören. Denna behörighet definieras i manifestfilen för varje innehållsleverantör.

Allt detta en ansökan (som vill komma åt denna databas) måste göra är att begära detta tillstånd.

Nu som diskuterats tidigare i denna Android-handledning, fyra operationer kan utföras med en innehållsleverantör . Vi kommer att gå igenom var och en för en.

FRÅGOR

Nu har du öppnat leverantören och har behörighet att hämta data från den. Nästa steg är att konstruera frågan för att begära den nödvändiga åtgärden från leverantören .

Här är argumenten som används vid frågan:

ett) HATA : Det fungerar exakt som förklarats ovan.

2) Utsprång: Frågan ska returnera en uppsättning kolumner från hela databastabellen . Detta kallas projektion. Att skicka null returnerar alla kolumner, vilket är ineffektivt.

3) Urvalsklausul: TILL filter som förklarar vilka rader som ska returneras , formaterad som en SQL WHERE-sats (exklusive själva WHERE). Om du skickar null returneras alla rader för den angivna URI.

Om du till exempel anger ett alfabet (säg 'P') i sökkolumnen i din adressbok, skulle det returnera alla kontaktuppgifter som börjar med 'P'. Men om du inte anger något i sökfältet hämtas hela listan över kontakter (urvalssatsen sätts till 'null' i sådana fall).

4) Urvalsargument: Du kan inkludera “? S” i urvalet, som kommer att ersättas med värdena från selectionArgs, i den ordning de visas i urvalet.

5) Sorteringsordning: SQL ORDER BY-klausul (exklusive ORDER BY i sig). Att skicka noll hämtar de resultat som kan vara oordnade.

KODEXEMPEL för fråga:

  • Söker efter telefonnummer i Kontakter
Markörpekare = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { SträngkolumnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) Sträng-id = cursor.getString (cursorIndex) Strängnamn = cursor.getString (cursor .getColumnIndex (KontakterContract.Contacts.DISPLAY_NAME)) int numCount = Antal. (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) om (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.Chone.CONT. , ny String [] {id}, null) medan (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Namn:' + namn + ', Telefonnummer:' + phoneNo + ''} phoneCursor.close ()}}}

INFÖRANDE

Låt oss anta att du vill infoga nya kontakter i din adressbok. ContentValues-objekt används för att göra dessa infogningar. ContentValue-objektnycklarna och kolumnerna för innehållsleverantörer måste matcha för att uppnå detta. Här är ett exempel på detta:

KODEXEMPEL FÖR insättning:

  • Åtgärden är att infoga ny post med namnet “Rajnikant” och nummer “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) .withVal. ) 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)

UPPDATERING

För att uppdatera en innehållsleverantör används följande argument:

ett) HATA: Innehållsleverantörens URI

2) ContentValues: Detta innehåller de värden som skulle ersätta befintlig data.

3) Urvalsklausul: Detta kan hjälpa till att välja de specifika poster som ska uppdateras

4) Urvalsargument: Du kan inkludera “? S” i urvalet, som kommer att ersättas med värdena från selectionArgs, i den ordning de visas i urvalet.

Återigen, nycklarna för ContentValues-objektet måste matcha kolumnerna i innehållsleverantören annars skulle uppdateringen inte ske.

KODEXEMPEL FÖR Uppdatering:

  • Uppdaterar telefonnumret där namnet är 'Rajnikant'
Sträng där = 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)

RADERING

Radering använder samma argument som uppdatering med undantag för ContentValues-argumentet, vilket inte krävs eftersom det inte kommer att finnas några ersatta värden.

KODEXEMPEL FÖR radering:

  • Ta bort kontakten där namnet är “Rajnikant”
Sträng där = 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)

Vid insättning måste URI vara katalogbaserad. I alla andra fall kan URI: erna vara antingen ID-baserade eller katalogbaserade.

kontrollera flödesuttalanden i Java

Vi hoppas Android-handledning för nybörjare: Del 5 var inte så svårt att förstå! Vi kommer att diskutera mer om innehållsleverantörer i senare Android-handledning. Njut av att lära dig grunderna tills dess!

Har du några tvivel i denna Android-handledning? Fråga oss.

Happy Learning!

Följande resurser användes för att skapa denna Android-handledning! Officiella Android-utvecklare , Edureka.in

Du kanske också gillar dessa relaterade inlägg: