Androidi õpetused algajatele - 4. osa: sisupakkuja



Selles Androidi õpetuses käsitletakse sisupakkuja mõisteid. See on Androidi oluline ehituskivi, hõlbustades andmesidevahetust Android-süsteemis.

Meie eelmistes algajatele mõeldud Androidi õpetustes käsitlesime Androidi kolme esimest ehituskivi: Tegevus , Kavatsus ja Teenused . See artikkel on selles algajatele mõeldud Androidi õpetuste sarjas neljas ja käsitleb sisupakkujat, mis on Android-süsteemi teine ​​väga oluline komponent.

Sisupakkuja on teie Android-süsteemi vahendaja, hõlbustades andmete vahetamist erinevate Android-rakenduste vahel. Tutvume selle Androidi õpetuse üksikasjadega veidi.





Androidi õpetus algajatele-4 boonus: Laadige sisupakkuja kood alla siit . Sooviksite seda koodi, kui olete õpetuse läbi teinud! :)

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



Androidi õpetused: sisupakkuja

Sisuteenuse pakkuja hõlbustab juurdepääsu kesksele andmekogule või lattu, et võimaldada andmete jagamist ja andmetega manipuleerimist erinevates rakendustes.

Siin on mõned näited vaikesisu pakkujatest Android-süsteemi API-s:

Androidi õpetused: vaikesisu pakkujad Android-süsteemis



Need sisupakkujad võimaldavad kasutajal abstraktsiooni aluseks olevast andmebaasist. Üldiselt kasutavad sisuteenuse pakkujad andmebaasi salvestamiseks SQLite'i.

Võtame vana hea Facebooki rakenduse alati kasuliku näite, mis on aidanud meil asju lihtsustada ka varasemates Androidi õpetustes!

kuidas kasutada charat javas

Kõigil teistel on mingil hetkel oma suhtlusvõrgustiku elus oma Facebooki ajaskaalale pilt üles laaditud, eks! Kuidas sa seda teed?

Seinal oleval fotonupul klõpsates jõuate fotogaleriisse. Sealt saate valida üleslaaditava foto.

Tutvunud eelmiste artiklitega Androidi õpetuste sari , teate tegevuste ja kavatsuste kohta, seega teate, et juhtub nii:

Teie Facebooki sein on „TEGEVUS“. Nupul Foto klõpsates antakse edasi “INTENT”, mis edastab sõnumi ja avaneb “CONTENT PROVIDER” (fotogalerii). Foto laaditakse üles võrgu üleslaadimise teenusega „SERVICE”.

Vaadake seda reaalajas videot, et teada saada, kuidas sisupakkuja teie Facebooki rakenduses töötab.

Miks vajab Android-süsteem sisuteenuse pakkujaid?

Vajadus sisupakkujate järele tekib seetõttu, et ühes rakenduses loodud andmebaasi ei näe teine ​​rakendus.

SQLite abil on andmebaasi loomine ja salvestamine erinevates rakendustes lihtne, kuid probleem on selles, Androidi andmebaas on selle loova rakenduse jaoks privaatne . Androidis pole ühist salvestusruumi, millele iga rakendus pääseks. Seetõttu vajab Android-süsteem erinevate rakenduste jaoks andmebaasi kasutamiseks liidest, mis võimaldab sellist rakenduste ja protsesside vahelist andmevahetust. Siin tuleb mängima sisupakkuja.

Kas mul on tõesti vaja sisuteenuse pakkujat?

1) Sina kui soovite privaatset andmebaasi, pole vaja oma teenusepakkujat välja töötada konkreetse rakenduse jaoks (see andmebaas ei oleks juurdepääsetav muudele rakendustele kui see, mis selle lõi).

2) Sina siiski vajavad kohandatud pakkujat kohandatud otsingusoovituste esitamiseks oma rakendussüsteemis.

3) Teil oleks vaja ka sisupakkujat keerukate andmete kopeerimiseks ja kleepimiseks oma rakendusest teistesse rakendustesse.

Milliseid toiminguid sisuteenuse pakkuja toetab?

Sisupakkujad toetavad järgmisi põhitoiminguid:

üks) Päring: Päringud sisupakkujalt kõigi objektide jaoks, lähtudes määratud URI-st.

2) Kustuta: Kustutab määratud objektid sisuteenuse pakkuja andmebaasist.

3) Uuendus: Uuendab andmebaasis olevaid objekte.

4) Sisesta: Lisab andmebaasi uue objekti.

Toimingud sisuteenuse pakkujas toimingu sooritamiseks

1. samm: juurdepääs sisupakkujale

ContentResolveri kliendiobjekt kasutatakse juurdepääsuks sisuteenuse pakkuja andmetele. See suhtleb pakkujaobjektiga, mis omakorda aktsepteerib andmetele juurdepääsu taotluse ja tagastab soovitud tulemused. Pakkuja ja pakkuja kliendi objekti pakutav andmevahetusliides võimaldab suhelda erinevate protsesside / rakenduste vahel.

Andmebaasile juurdepääsu vajav rakendus peab selle deklareerima ja taotlema lube oma manifestifailis. Seda arutatakse üksikasjalikult meie järgnevates Androidi õpetustes.

Sisu URI

Sisu URI on üks argumentidest, mida pakkuja andmete tuvastamiseks kasutatakse. Sellel on neli osa:

üks) Skeem: Sisuteenuse pakkuja skeemil on püsiv väärtus: “sisu”.

c ++ massiivi sort

2) Asutus: See on pakkuja sümboolne nimi ja on igaühe jaoks ainulaadne. Nii tõstame soovitud sisupakkuja välja nii paljude loendist.

3) Tee: Tee aitab eristada nõutavaid andmeid täielikust andmebaasist . Näiteks eristab kõnelogi sisuteenuse pakkuja vastamata kõnesid, vastuvõetud kõnesid jne, kasutades erinevaid teid.

4) ID: See ei ole kohustuslik komponent ja seda ei pruugi URI-s sisalduda, kuid kui see on olemas, peaks see olema numbriline. Näiteks, kui soovite oma meediumisisu pakkujalt juurde pääseda konkreetsele muusikafailile, määrake ka ID .

Protsess

Pakkuja volitusi kasutades tuvastab ContentResolver õige sisupakkuja (kuna volitused on iga sisupakkuja jaoks ainulaadsed). Pärast seda kasutatakse URI teekomponenti õige (nõutava) andmetabeli valimiseks. ID olemasolu korral teaks teenusepakkuja, milliseid täpseid andmeid taotletakse.

URI-d on kahte tüüpi:

Lisaks võib URI-del olla ka piirav teave.

2. samm: kuidas andmeid sisupakkujalt hankida

Kuigi ContentResolveril on nüüd juurdepääs andmetabelile, ei saa ta nõutavaid andmeid hankida, kui rakendusel seda pole „Lugemisõiguse luba” selle konkreetse pakkuja jaoks. See luba on määratletud iga sisupakkuja manifestifailis.

Kõik see rakendus (kes soovib sellele andmebaasile juurde pääseda) peab seda luba küsima.

Nagu selles Androidi õpetuses varem käsitletud, sisuteenuse pakkuja abil saab teha neli toimingut . Me läheme igaüks üle ükshaaval.

Päring

Nüüd olete pöördunud teenusepakkuja poole ja teil on luba sealt andmeid hankida. Järgmine samm on koostage päring, et teenusepakkujalt nõuda vajalikku toimingut .

Päringu tegemisel kasutatud argumendid on järgmised.

üks) VIHKAMINE : See töötab täpselt nii, nagu eespool selgitatud.

2) Projektsioon: Päring peaks tagastab kogu andmebaasitabeli veerukomplekti . Seda nimetatakse projektsiooniks. Nulli möödumisel tagastatakse kõik veerud, mis on ebaefektiivne.

3) Valikuklausel: TO filter, mis deklareerib, millised read tagastada , vormindatud SQL WHERE klauslina (välja arvatud WHERE ise). Nulli möödumisel tagastatakse antud URI kõik read.

Näiteks kui sisestate oma aadressiraamatu otsinguveeru tähestiku (öelge „P”), tagastatakse sellega kõik kontaktandmed, mis algavad tähega „P”. Kui te aga otsinguribale midagi ei sisesta, leitakse täielik kontaktide loend (sellistel juhtudel määratakse valikuklausli väärtuseks null).

4) Valiku argument: Võite valikusse lisada „? S“, mis asendatakse valiku SELECTArgs väärtustega selles järjekorras, nagu need valikus kuvatakse.

5) SortOrder: SQL-tellimus ORDER BY (välja arvatud tellimus ise). Nulliga passimine toob tulemused, mis võivad olla järjestamata.

KOODI NÄIDE päringute jaoks:

  • Telefoninumbrite otsimine menüüst Kontaktid
Kursori kursor = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (arv> 0) {String contactDetails = '' while (kursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) Stringi nimi = cursor.getString (kursor .getColumnIndex (ContactsContract.Contacts.DIS Integ.DIS (cursor.getString (kursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKind, null, CommonDataK , uus string [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Nimi: + nimi + ', Telefoninumber:' + phoneNo + ''} phoneCursor.close ()}}}

SISESTAMINE

Oletame, et soovite lisada uusi kontakte oma aadressiraamatusse. Objekt ContentValues kasutatakse nende sisestuste tegemiseks. Objekti võtmed ContentValue ja sisuteenuse pakkuja veerud peavad selle saavutamiseks vastama. Siin on näide selle kohta:

Koodinäide sisestamiseks:

  • Toiminguna sisestatakse uus kirje nimega “Rajnikant” ja numbriga “9988999888”
// Operation ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .WallValue (RawContact). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.ContentNAME.Name.Disign (Rajoon) (Rajone). ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .WithValue (Data.MIMETYPE, Telefon.CONTENT_ITEM_TYPE) .withValue (Telefon.NUMBER (Telefon.NUMBER) (Telefon.NUMBER). , Telefon.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

UUENDAMINE

Sisupakkuja värskendamiseks kasutatakse järgmisi argumente:

üks) VIHA: Sisupakkuja URI

2) ContentValues: See sisaldab väärtusi, mis asendaksid olemasolevad andmed.

kraadiõppe diplom magistrikraad

3) Valikuklausel: See võib aidata uuendada konkreetseid kirjeid

4) Valiku argument: Võite valikusse lisada „? S“, mis asendatakse valiku SELECTArgs väärtustega selles järjekorras, nagu need valikus kuvatakse.

Veelkord, objekti ContentValues ​​võtmed peavad vastama sisupakkuja veergudele muidu ei toimuks värskendust.

KOODI NÄIDE UUENDAMISEKS:

  • Telefoninumbri värskendamine, kui nimi on “Rajnikant”
String kus = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = uus string [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (kus, params) .withValue (ContactsContract.Common. Telefon.NUMBER, “9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

KUSTUTAMINE

Kustutamisel kasutatakse samu argumente nagu värskendamisel, välja arvatud argument ContentValues, mis pole vajalik, kuna seal pole asendatud väärtusi.

KOODI NÄIDE kustutamiseks:

  • Kustutage kontakt, kus nimi on “Rajnikant”
String kus = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = uus string [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ) .applyBatch (ContactsContract.AUTHORITY, ops)

Operatsiooni Insert korral peab URI olema kataloogipõhine. Kõigil muudel juhtudel võivad URI-d olla kas ID-põhised või kataloogipõhised.

Me loodame Androidi õpetus algajatele: 5. osa polnud liiga raske aru saada! Lisateavet sisupakkujate kohta arutame järgmistes Androidi õpetustes. Nautige seni põhitõdede õppimist!

Kas teil on selles Androidi õpetuses kahtlusi? Küsi meilt.

Head õppimist!

Selle Androidi õpetuse loomisel kasutati järgmisi ressursse! Ametlikud Androidi arendajad , Edureka.in

Samuti võivad teile meeldida need seotud postitused: