Vodiči za Android za početnike, 4. dio: Dobavljač sadržaja

Ovaj vodič za Android razmatra koncepte dobavljača sadržaja. Važan je gradivni blok Androida, olakšavajući razmjenu podataka u Android sustavu.

U našim prethodnim vodičima za Android za početnike razgovarali smo o prva tri gradivna elementa Androida: Aktivnost , Namjera i Usluge . Ovaj je članak četvrti u ovoj seriji Vodiča za Android za početnike i raspravlja o dobavljaču sadržaja, što je još jedna vrlo važna komponenta Android sustava.

Davatelj sadržaja posrednik je vašeg Android sustava, olakšavajući razmjenu podataka između različitih Android aplikacija. Uđimo malo u detalje toga u ovom Android tutorialu.





Vodič za Android za početnike-4 Bonus: Ovdje preuzmite kod davatelja sadržaja . Htjeli biste ovaj kod nakon što prođete kroz tutorial! :)

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



Vodiči za Android: davatelj sadržaja

Dobavljač sadržaja olakšava pristup središnjoj pohrani podataka ili skladištu podataka kako bi omogućio razmjenu podataka i manipulaciju podacima u različitim aplikacijama.

Evo nekoliko primjera zadanih dobavljača sadržaja u API-ju Android sustava:

Vodiči za Android: Zadani davatelji sadržaja u sustavu Android



Ovi davatelji sadržaja omogućuju apstrakciju korisnika iz osnovne baze podataka. Općenito, dobavljači sadržaja koriste SQLite za pohranu temeljne baze podataka.

Uzmimo uvijek koristan primjer dobre stare Facebook aplikacije koja nam je pomogla pojednostaviti stvari i u prethodnim Vodičima za Android!

Svi ste u nekom trenutku svog života na društvenim mrežama prenijeli sliku na svoju Facebook vremensku traku, zar ne! Kako to radiš?

Klikom na gumb Foto na zidu dolazi se do galerije fotografija. Odatle možete odabrati fotografiju za prijenos.

koja je najbolja java ide

Pročitavši prethodne članke Serija Android Vodiči , znate o aktivnostima i namjerama, dakle, znate da se to događa:

Vaš Facebook zid je 'AKTIVNOST'. Kad kliknete na gumb Foto, prenosi se 'NAMJERA' koja prenosi poruku i otvara se 'DAVAČ SADRŽAJA' (Fotogalerija). Fotografija se prenosi pomoću mrežnog prijenosa 'SERVICE'.

Pogledajte ovaj videozapis uživo kako biste saznali kako davatelj usluga radi unutar vaše Facebook aplikacije.

Zašto sustav Android treba davatelje sadržaja?

Potreba za dobavljačima sadržaja pojavljuje se jer baza podataka stvorena u jednoj aplikaciji nije vidljiva drugoj aplikaciji.

Jednostavno je stvoriti i pohraniti bazu podataka u različite aplikacije pomoću SQLitea, međutim problem je u tome, baza podataka u Androidu privatna je za aplikaciju koja je stvara . U Androidu nema zajedničkog prostora za pohranu kojem svaka aplikacija može pristupiti. Stoga, da bi različite aplikacije koristile bazu podataka, Android sustav treba sučelje koje omogućuje takvu razmjenu podataka između aplikacija i međuprocesa. Ovo je mjesto gdje dobavljač sadržaja dolazi igrati.

Trebam li stvarno pružatelja sadržaja?

1) Vi ne trebate razvijati vlastitog davatelja usluge ako želite privatnu bazu podataka za određenu aplikaciju (ova baza podataka ne bi bila dostupna aplikacijama osim one koja ju je stvorila).

2) Vi međutim potreban vam je prilagođeni pružatelj usluga za pružanje prijedloga prilagođenih pretraživanja u vlastitom aplikacijskom sustavu.

3) Trebao bi vam i davatelj sadržaja za kopiranje i lijepljenje složenih podataka iz vaše aplikacije u druge programe.

Koje operacije podržava dobavljač sadržaja?

Davatelji sadržaja podržavaju sljedeće osnovne operacije:

jedan) Upit: Pita dobavljača sadržaja za sve objekte, na temelju navedenog URI-ja.

2) Izbrisati: Briše navedene objekte iz baze podataka davatelja sadržaja.

3) Ažuriraj: Ažurira objekte u bazi podataka.

4) Umetnuti: Ubacuje novi objekt u bazu podataka.

Koraci za provođenje operacije u dobavljaču sadržaja

1. korak: Pristup dobavljaču sadržaja

Objekt klijenta ContentResolver koristi se za pristup podacima dobavljača sadržaja. Komunicira s objektom davatelja usluga, koji zauzvrat prihvaća zahtjev za pristup podacima i vraća željene rezultate. Sučelje za razmjenu podataka koje pruža davatelj i objekt klijenta pružatelja omogućuje komunikaciju između različitih procesa / aplikacija.

Aplikacija koja treba pristupiti bazi podataka mora to prijaviti i zatražiti dozvole u svojoj datoteci manifesta. O tome će se detaljno raspravljati u našim sljedećim vodičima za Android.

URI sadržaja

URI sadržaja jedan je od argumenata koji se koristi za identificiranje podataka kod davatelja usluge. Ima četiri dijela:

jedan) Shema: Shema za davatelje sadržaja ima konstantnu vrijednost: 'sadržaj'.

2) Autoritet: To je simbolično ime davatelja usluga i jedinstveno je za svakog od njih. Na ovaj način s popisa toliko izdvajamo željenog davatelja sadržaja.

3) Staza: Staza pomaže u razlikovanju potrebnih podataka od kompletne baze podataka . Na primjer, davatelj sadržaja zapisnika poziva razlikuje propuštene pozive, primljene pozive itd. Pomoću različitih putova.

4) ISKAZNICA: Nije obvezna komponenta i možda neće biti prisutan u URI-ju, ali ako postoji, trebao bi biti numerički. Na primjer, ako želite pristupiti određenoj glazbenoj datoteci od svog dobavljača medijskog sadržaja, trebali biste navesti i ID .

Postupak

Koristeći ovlaštenje davatelja usluga, ContentResolver identificira ispravnog davatelja sadržaja (jer je ovlaštenje jedinstveno za svakog pružatelja sadržaja). Nakon toga komponenta puta URI-ja koristi se za odabir ispravne (tražene) tablice podataka. U slučaju da postoji ID, davatelj usluga će znati koji se točno podaci traže.

URI su dvije vrste:

Uz to, URI-i mogu imati i ograničavajuće podatke.

Korak 2: Kako dohvatiti podatke od davatelja sadržaja

Iako ContentResolver sada ima pristup podatkovnoj tablici, ne može dohvatiti tražene podatke ako ih aplikacija nema 'Dopuštenje za čitanje' za tog određenog pružatelja usluga. Ovo je dopuštenje definirano u datoteci manifesta svakog davatelja sadržaja.

Sve to aplikacija (koji želi pristupiti ovoj bazi podataka) mora zatražiti ovo dopuštenje.

Kao što je već spomenuto u ovom vodiču za Android, pomoću davatelja sadržaja mogu se izvršiti četiri operacije . Preći ćemo svaki po jedan.

UPIT

Sada ste pristupili davatelju usluga i imate dopuštenje za preuzimanje podataka s njega. Sljedeći korak je konstruirajte upit kako biste od pružatelja zahtijevali traženu radnju .

Evo argumenata koji se koriste tijekom upita:

jedan) MRZITI : Djeluje točno onako kako je gore objašnjeno.

2) Projekcija: Upit bi trebao vrati skup stupaca iz cijele tablice baze podataka . To je poznato kao projekcija. Donošenje null vratit će sve stupce, što je neučinkovito.

3) Klauzula o odabiru: DO filtar koji deklarira koje redove vratiti , formatiran kao SQL WHERE klauzula (isključujući samu WHERE). Prosljeđivanje null vratit će sve retke za zadani URI.

Na primjer, ako unesete abecedu (recimo „P“) u stupac pretraživanja svoje adrese, tada će se vratiti svi detalji za kontakt koji počinju s „P“. Međutim, ako ništa ne unesete u traku za pretraživanje, preuzima se cjelovit popis kontakata (klauzula o odabiru postavljena je na 'null' u takvim slučajevima).

4) Argument odabira: U odabir možete uključiti “? S”, koji će biti zamijenjeni vrijednostima iz selectionArgs, redoslijedom kojim se pojavljuju u odabiru.

5) Redoslijed: Klauzula SQL ORDER BY (isključujući sam ORDER BY). Ako proslijedite nulu, dohvatit će se rezultati koji mogu biti neuređeni.

PRIMJER KODA za postavljanje upita:

  • Traženje telefonskih brojeva u Kontaktima
Kursor pokazivača = 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) Ime niza = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAMEContacts.DISPLAY_NAMEContacts.DISPLAY_NAMEContacts.DISPLAYPARTAInt.Int. (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER)))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKOND. , novi String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', Broj telefona:' + phoneNo + ''} phoneCursor.close ()}}}

UMETANJE

Pretpostavimo da u svoj adresar želite umetnuti nove kontakte. ContentValues ​​objekt koristi se za izvršavanje ovih umetanja. Ključevi sadržaja ContentValue i stupci davatelja sadržaja moraju se podudarati da bi se to postiglo. Evo primjera za to:

PRIMJER KODA za umetanje:

  • Operacija je umetanje novog unosa s imenom “Rajnikant” i brojem “9988999888”
// Operacija ArrayList ops = novi ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, nulltacs. ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TVAME. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withV88, V8 , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

AŽURIRANJE

Za ažuriranje davatelja sadržaja koriste se sljedeći argumenti:

jedan) MRZITI: URI davatelja sadržaja

2) Vrijednosti sadržaja: Sadrži vrijednosti koje bi zamijenile postojeće podatke.

3) Klauzula o odabiru: To vam može pomoći u odabiru određenih zapisa za ažuriranje

4) Argument odabira: U odabir možete uključiti “? S”, koji će biti zamijenjeni vrijednostima iz selectionArgs, redoslijedom kojim se pojavljuju u odabiru.

Još jednom, tipke objekta ContentValues ​​moraju se podudarati sa stupcima u dobavljaču sadržaja inače se ažuriranje ne bi dogodilo.

PRIMJER KODA ZA Ažuriranje:

  • Ažuriranje telefonskog broja pod nazivom 'Rajnikant'
Niz gdje = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (where, params) .withValu (ContactsContractKontandtactCom. Telefon.BROJ, “9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

BRISANJE

Brisanje koristi iste argumente kao i ažuriranje, s izuzetkom argumenta ContentValues, koji nije potreban jer neće biti zamijenjenih vrijednosti.

PRIMJER KODA ZA Brisanje:

  • Izbrišite kontakt čiji je naziv “Rajnikant”
Niz gdje = 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 ()) getContent ) .applyBatch (ContactsContract.AUTHORITY, ops)

U slučaju rada Umetanje, URI se mora temeljiti na direktoriju. U svim ostalim slučajevima, URI-i mogu biti utemeljeni na ID-u ili na imeniku.

Nadamo se Vodič za Android za početnike: 5. dio nije bilo previše teško razumjeti! O dobavljačima sadržaja razmotrit ćemo više u sljedećim Vodičima za Android. Uživajte u učenju osnova do tada!

prijava za javascript upozorenje za preuzimanje

Imate li dvojbi u ovom vodiču za Android? Pitajte nas.

Sretno učenje!

Za stvaranje ovog vodiča za Android korišteni su sljedeći resursi! Službeni programeri za Android , Edureka.in

Možda će vam se svidjeti i ovi povezani postovi: