Výukové programy pre Android pre začiatočníkov, 4. časť: Poskytovateľ obsahu



Tento výukový program pre Android pojednáva o konceptoch poskytovateľa obsahu. Je dôležitým stavebným prvkom systému Android a umožňuje výmenu údajov v systéme Android.

V našich predchádzajúcich tutoriáloch pre Android pre začiatočníkov sme diskutovali o prvých troch stavebných prvkoch systému Android: Činnosť , Zámer a Služby . Tento článok je štvrtým v tejto sérii Výučbových programov pre Android pre začiatočníkov a pojednáva o Poskytovateľovi obsahu, ktorý je ďalšou veľmi dôležitou súčasťou systému Android.

Poskytovateľ obsahu je sprostredkovateľom vášho systému Android a umožňuje výmenu údajov medzi rôznymi aplikáciami pre Android. Poďme sa v tomto výučbe pre Android podrobnejšie zaoberať.





Výukový program pre Android pre začiatočníkov - 4 bonusy: Stiahnite si kód poskytovateľa obsahu tu . Tento kód by ste chceli, keď ste absolvovali tutoriál! :)

[dl url = ”#” class = ”eModal eModal-6 ″ title =” Stiahnutie kódu ”desc =” ”type =” ”align =” ”pre =” stiahnutie ”]



Výukové programy pre Android: Poskytovateľ obsahu

Poskytovateľ obsahu uľahčuje prístup do centrálneho dátového skladu alebo skladu, aby umožnil zdieľanie a manipuláciu s dátami v rôznych aplikáciách.

Tu je niekoľko príkladov predvolených poskytovateľov obsahu v rozhraní API systému Android:

Výukové programy pre Android: Predvolení poskytovatelia obsahu v systéme Android



Títo poskytovatelia obsahu umožňujú abstrakciu používateľov zo základnej databázy. Poskytovatelia obsahu vo všeobecnosti používajú server SQLite na ukladanie podkladovej databázy.

Zoberme si vždy užitočný príklad starej dobrej aplikácie pre Facebook, ktorá nám pomohla zjednodušiť veci aj v predchádzajúcich tutoriáloch pre Android!

Všetci ste niekedy v živote na sociálnych sieťach nahrali obrázok na svoju časovú os Facebook, že! Ako to robíš?

Kliknutím na tlačidlo Foto na stene sa dostanete do fotogalérie. Odtiaľ si môžete vybrať fotografiu, ktorú chcete nahrať.

Po prečítaní predchádzajúcich článkov z Séria výukových programov pre Android , viete o činnostiach a zámeroch, viete, že sa to stane:

Vaša stena na Facebooku je „AKTIVITA“. Po kliknutí na tlačidlo Fotografie sa odovzdá „ZÁMER“, ktorý odošle správu, a otvorí sa „POSKYTOVATEĽ OBSAHU“ (Fotogaléria). Fotografia sa nahráva pomocou sieťového nahrávania „SERVICE“.

Sledujte toto živé video a zistite, ako Poskytovateľ obsahu pracuje vo vašej aplikácii na Facebooku.

Prečo systém Android potrebuje poskytovateľov obsahu?

Potreba poskytovateľov obsahu vzniká, pretože databáza vytvorená v jednej aplikácii nie je viditeľná pre druhú aplikáciu.

Je jednoduché vytvárať a ukladať databázu v rôznych aplikáciách pomocou SQLite, problém však je, databáza v systéme Android je súkromná pre aplikáciu, ktorá ju vytvára . V systéme Android neexistuje spoločný úložný priestor, ku ktorému má prístup každá aplikácia. Preto pre rôzne aplikácie, ktoré používajú databázu, potrebuje systém Android rozhranie, ktoré umožňuje takúto výmenu údajov medzi aplikáciami a medzi procesmi. Tu prichádza na rad poskytovateľ obsahu.

Naozaj potrebujem poskytovateľa obsahu?

1) Vy Ak potrebujete súkromnú databázu, nemusíte si vyvíjať vlastného poskytovateľa pre konkrétnu aplikáciu (táto databáza by nebola prístupná iným aplikáciám ako tej, ktorá ich vytvorila).

2) Vy však Potrebujete vlastného poskytovateľa, aby vám poskytol návrhy na vlastné vyhľadávanie vo vašom vlastnom aplikačnom systéme.

3) Potrebovali by ste tiež poskytovateľa obsahu na kopírovanie a vkladanie komplexných údajov z vašej aplikácie do iných aplikácií.

Aké operácie podporuje poskytovateľ obsahu?

Poskytovatelia obsahu podporujú tieto základné operácie:

jeden) Dopyt: Dotazuje sa na poskytovateľa obsahu pre všetky objekty na základe zadaného identifikátora URI.

2) Odstrániť: Odstráni zadané objekty z databázy poskytovateľa obsahu.

3) Aktualizácia: Vykonáva aktualizácie objektov v databáze.

4) Vložka: Vloží nový objekt do databázy.

Kroky na vykonanie operácie v Poskytovateľovi obsahu

Krok 1: Prístup k poskytovateľovi obsahu

Objekt klienta ContentResolver sa používa na prístup k údajom od poskytovateľa obsahu. Komunikuje s objektom poskytovateľa, ktorý naopak prijíma požiadavku na prístup k údajom a vracia požadované výsledky. Rozhranie výmeny údajov poskytované poskytovateľom a objektom klienta poskytovateľa umožňuje komunikáciu medzi rôznymi procesmi / aplikáciami.

Aplikácia, ktorá potrebuje na prístup do databázy, to musí deklarovať a požiadať o povolenie v súbore manifestu. Tomuto by sme sa podrobne venovali v našich ďalších tutoriáloch pre Android.

Identifikátor URI obsahu

Identifikátor URI obsahu je jedným z argumentov použitých na identifikáciu údajov v poskytovateľovi. Má štyri časti:

jeden) Schéma: Schéma poskytovateľa obsahu má konštantnú hodnotu: „obsah“.

2) Orgán: Je to symbolické meno poskytovateľa a je pre každého z nich jedinečné. Takto vyberieme požadovaného poskytovateľa obsahu zo zoznamu toľkých.

3) Cesta: Cesta pomáha odlíšiť požadované údaje od úplnej databázy . Napríklad poskytovateľ obsahu protokolu hovorov rozlišuje medzi zmeškanými hovormi, prijatými hovormi atď. Pomocou rôznych ciest.

4) ID: Nie je to povinná súčasť a nemusí byť súčasťou URI, ale ak je prítomný, mal by byť číselný. Napríklad ak chcete získať prístup k špecifickému hudobnému súboru od svojho poskytovateľa mediálneho obsahu, zadali by ste aj ID .

Proces

Pomocou oprávnenia poskytovateľa identifikuje ContentResolver správneho poskytovateľa obsahu (pretože oprávnenie je pre každého poskytovateľa obsahu jedinečné). Po vykonaní tohto kroku sa zložka cesty URI použije na výber správnej (požadovanej) údajovej tabuľky. V prípade, že je k dispozícii ID, poskytovateľ by vedel, aké presné údaje sa požadujú.

Identifikátory URI sú dvoch typov:

Okrem toho môžu mať identifikátory URI tiež obmedzujúce informácie.

Krok 2: Ako načítať údaje od poskytovateľa obsahu

Aj keď má ContentResolver teraz prístup k údajovej tabuľke, nemôže načítať požadované údaje, pokiaľ k tomu nemá aplikáciu „Povolenie na čítanie“ pre konkrétneho poskytovateľa. Toto povolenie je definované v súbore manifestu každého poskytovateľa obsahu.

Všetko to je aplikácia (ktorý chce získať prístup k tejto databáze) musí požiadať o toto povolenie.

Ako už bolo spomenuté vyššie v tomto výučbe pre Android, pomocou operátora obsahu je možné vykonať štyri operácie . Prejdeme každú jednu po druhej.

DOPYT

Teraz ste sa dostali k poskytovateľovi a máte povolenie na načítanie údajov od neho. Ďalším krokom je skonštruujte dopyt tak, aby vyžadoval od poskytovateľa požadovanú akciu .

Tu sú argumenty použité pri dotazovaní:

jeden) NENÁVIDIŤ : Funguje to presne tak, ako je to vysvetlené vyššie.

2) Projekcia: Dotaz by mal vráti sadu stĺpcov z celej databázovej tabuľky . Toto sa nazýva projekcia. Ak zadáte null, vrátia sa všetky stĺpce, čo je neefektívne.

3) Klauzula o výbere: TO filter deklarujúci, ktoré riadky sa majú vrátiť , formátované ako klauzula SQL WHERE (okrem samotnej WHERE). Ak zadáte null, vrátia sa všetky riadky pre daný URI.

Ak napríklad zadáte abecedu (povedzme „P“) do vyhľadávacieho stĺpca vo vašom adresári, vráti všetky kontaktné údaje začínajúce sa na „P“. Ak však do vyhľadávacieho panela nič nezadáte, získa sa kompletný zoznam kontaktov (v takýchto prípadoch je klauzula výberu nastavená na hodnotu „null“).

4) Argument výberu: Do výberu môžete zahrnúť „?“, Ktoré budú nahradené hodnotami z selectionArgs v poradí, v akom sa objavia vo výbere.

5) SortOrder: Klauzula SQL ORDER BY (okrem samotného OBJEDNÁVKY). Pri použití nuly sa načítajú výsledky, ktoré môžu byť nezoradené.

PRÍKLAD KÓDU na dopytovanie:

  • Vyhľadávanie telefónnych čísel v adresári Kontakty
Kurzor 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) Názov reťazca = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numC (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONT '=' , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Meno:' + meno + ', Telefónne číslo:' + phoneNo + ''} phoneCursor.close ()}}}

VLOŽENIE

Predpokladajme, že chcete vložiť nové kontakty do svojho adresára. Objekt ContentValues sa používa na tieto vloženia. Aby sa to dosiahlo, musia sa zhodovať kľúče objektu ContentValue a stĺpce Poskytovateľa obsahu. Tu je príklad:

PRÍKLAD KÓDU NA VLOŽENIE:

  • Operácia je vložiť nový záznam s názvom „Rajnikant“ a číslom „9988999888“
// Operácia ArrayList ops = nový ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawConulls.ACCOUNT) ()) 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) .wValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUM9, 88) , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

AKTUALIZÁCIA

Na aktualizáciu poskytovateľa obsahu sa používajú nasledujúce argumenty:

jeden) NENÁVIDIŤ: URI poskytovateľa obsahu

2) Hodnoty obsahu: Obsahuje hodnoty, ktoré by nahradili existujúce údaje.

3) Klauzula o výbere: To môže pomôcť pri výbere konkrétnych záznamov, ktoré sa majú aktualizovať

4) Argument výberu: Do výberu môžete zahrnúť „?“, Ktoré budú nahradené hodnotami z selectionArgs v poradí, v akom sa objavia vo výbere.

Ešte raz kľúče objektu ContentValues ​​sa musia zhodovať so stĺpcami v poskytovateľovi obsahu inak by k aktualizácii nedošlo.

séria fibonacciho c ++

PRÍKLAD KÓDU NA Aktualizáciu:

  • Aktualizácia telefónneho čísla s menom „Rajnikant“
Reťazec where = 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. Phone.NUMBER, „9876543210“) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

VYMAZANIE

Pri mazaní sa používajú rovnaké argumenty ako pri aktualizácii, s výnimkou argumentu ContentValues, ktorý sa nevyžaduje, pretože tu nebudú žiadne nahradené hodnoty.

PRÍKLAD KÓDU NA Vymazanie:

  • Odstráňte kontakt s menom „Rajnikant“
Reťazec where = 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)

V prípade operácie vloženia musí byť URI založený na adresári. Vo všetkých ostatných prípadoch môžu byť identifikátory URI založené na ID alebo adresári.

Dúfame Výukový program pre Android pre začiatočníkov: 5. časť nebolo príliš ťažké pochopiť! V nasledujúcich príručkách pre Android si podrobnejšie povieme o poskytovateľoch obsahu. Do tej doby sa učte základné veci!

Máte pochybnosti v tomto výučbe pre Android? Opýtajte sa nás.

Šťastné učenie!

Pri vytváraní tohto výukového programu pre Android boli použité nasledujúce zdroje! Oficiálni vývojári systému Android , Edureka.in

Tiež by sa vám mohli páčiť tieto súvisiace príspevky: