„Android“ mokymo programos pradedantiesiems 4 dalis: turinio teikėjas



Šioje „Android“ mokymo programoje aptariamos turinio teikėjo sąvokos. Tai yra svarbus „Android“ elementas, palengvinantis duomenų mainus „Android“ sistemoje.

Ankstesnėse „Android“ pamokose pradedantiesiems aptarėme tris pirmuosius „Android“ elementus: Veikla , Tikslas ir Paslaugos . Šis straipsnis yra ketvirtas šioje „Android“ pamokų serijoje pradedantiesiems ir aptariamas turinio teikėjas, kuris yra dar vienas labai svarbus „Android“ sistemos komponentas.

Turinio teikėjas yra jūsų „Android“ sistemos tarpininkas, palengvinantis keitimąsi duomenimis tarp skirtingų „Android“ programų. Leiskite mums šiek tiek susipažinti su šia „Android“ mokymo programa.





„Android“ pamoka pradedantiesiems - 4 premija: Atsisiųskite turinio teikėjo kodą čia . Jūs norėtumėte šio kodo, kai pereisite pamoką! :)

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



„Android“ mokymo programos: turinio teikėjas

Turinio teikėjas palengvina prieigą prie centrinės duomenų saugyklos ar sandėlio, kad būtų galima dalytis duomenimis ir manipuliuoti duomenimis įvairiose programose.

Štai keli numatytųjų „Android“ sistemos API turinio teikėjų pavyzdžiai:

„Android“ mokymo programos: numatytieji turinio teikėjai „Android“ sistemoje



Šie turinio teikėjai leidžia vartotojui gauti informaciją iš pagrindinės duomenų bazės. Paprastai turinio teikėjai naudoja SQLite pagrindinei duomenų bazei saugoti.

Paimkime visada naudingą senos geros „Facebook“ programos pavyzdį, kuris padėjo mums supaprastinti dalykus ir ankstesnėse „Android“ mokymo programose!

Visi jūs tam tikru socialinio tinklo gyvenimo momentu įkėlėte nuotrauką į „Facebook“ laiko juostą, tiesa! Kaip tu tai darai?

Spustelėjus mygtuką „Nuotrauka“ ant sienos, pateksite į nuotraukų galeriją. Iš ten galite pasirinkti nuotrauką, kurią norite įkelti.

Perskaitęs ankstesnius „Android“ pamokų serija , jūs žinote apie veiklą ir ketinimus, todėl žinote, kad taip nutinka:

Jūsų „Facebook“ siena yra „VEIKLA“. Spustelėjus mygtuką Nuotrauka, perduodamas „INTENT“, kuris perduoda pranešimą, ir atsidaro „CONTENT PROVIDER“ (Nuotraukų galerija). Nuotrauka įkeliama naudojant tinklo įkėlimą „SERVICE“.

Žiūrėkite šį tiesioginį vaizdo įrašą, kad sužinotumėte, kaip turinio teikėjas veikia jūsų „Facebook“ programoje.

Kodėl „Android“ sistemai reikia turinio teikėjų?

Turinio teikėjų poreikis kyla dėl to, kad vienoje programoje sukurta duomenų bazė nėra matoma antrai programai.

kas yra java'os metodas

Sukurti ir saugoti duomenų bazę įvairiose programose naudojant SQLite yra paprasta, tačiau problema yra ši, „Android“ duomenų bazė yra privati ​​ją kuriančiai programai . „Android“ nėra bendros saugyklos zonos, prie kurios galėtų naudotis kiekviena programa. Todėl norint, kad įvairios programos galėtų naudoti duomenų bazę, „Android“ sistemai reikalinga sąsaja, leidžianti keistis tokiais tarpprogramomis ir procesais. Čia ateina žaisti turinio teikėjas.

Ar man tikrai reikia turinio teikėjo?

1) Jūs nereikia kurti savo teikėjo, jei norite privačios duomenų bazės konkrečiai programai (ši duomenų bazė nebūtų prieinama tik toms programoms, kurios ją sukūrė).

2) Jūs vis dėlto reikia individualizuoto teikėjo, kuris teiktų tinkintos paieškos pasiūlymus savo taikomojoje sistemoje.

3) Jums taip pat reikės turinio teikėjo nukopijuoti ir įklijuoti sudėtingus duomenis iš savo programos į kitas programas.

Kokias operacijas palaiko turinio teikėjas?

Turinio teikėjai palaiko šias pagrindines operacijas:

vienas) Užklausa: Užklausa visų objektų turinio teikėją pagal nurodytą URI.

2) Ištrinti: Ištrina nurodytus objektus iš turinio teikėjo duomenų bazės.

3) Atnaujinti: Atnaujina duomenų bazės objektus.

4) Įdėti: Įterpia naują objektą į duomenų bazę.

Veiksmai, kuriuos reikia atlikti turinio teikėjo operacijoje

1 veiksmas: pasiekite turinio teikėją

„ContentResolver“ kliento objektas naudojama prieigai prie turinio teikėjo duomenų. Jis bendrauja su teikėjo objektu, kuris savo ruožtu priima prašymą pasiekti duomenis ir pateikia norimus rezultatus. Teikėjo ir teikėjo kliento objekto teikiama duomenų mainų sąsaja leidžia bendrauti įvairiais procesais / programomis.

Programa, kuriai reikia prieigos prie duomenų bazės, turi tai deklaruoti ir prašyti leidimų savo manifesto faile. Tai bus išsamiai aptarta mūsų tolesnėse „Android“ pamokose.

Turinio URI

Turinio URI yra vienas iš argumentų, naudojamų teikėjo duomenims identifikuoti. Jį sudaro keturios dalys:

vienas) Schema: Turinio teikėjo schema turi pastovią vertę: „turinys“.

2) Institucija: Tai simbolinis teikėjo vardas ir yra unikalus kiekvienam. Taip mes išskiriame norimą turinio teikėją iš tiek daug sąrašo.

3) Kelias: Kelias padeda atskirti reikalingus duomenis iš visos duomenų bazės . Pavyzdžiui, skambučių žurnalo turinio teikėjas skirtingais keliais išskiria praleistus skambučius, gautus skambučius ir kt.

4) ID: Tai nėra privalomas komponentas ir jo gali nebūti URI, tačiau jei yra, jis turėtų būti skaitinis. Pavyzdžiui, jei norite pasiekti konkretų muzikos failą iš savo medijos turinio teikėjo, taip pat nurodykite ID .

Procesas

Naudodamas teikėjo įgaliojimus, „ContentResolver“ nustato teisingą turinio teikėją (nes kiekvienam turinio teikėjui autoritetas yra unikalus). Tai atlikus, URI kelio komponentas naudojamas teisingai (prašomai) duomenų lentelei pasirinkti. Jei yra asmens kodas, paslaugų teikėjas žinotų, kokių tikslių duomenų prašoma.

URI yra dviejų tipų:

Be to, URI gali turėti ir ribojančią informaciją.

2 veiksmas: kaip gauti duomenis iš turinio teikėjo

Nors „ContentResolver“ dabar turi prieigą prie duomenų lentelės, jis negali nuskaityti reikalingų duomenų, nebent programa turi „Leidimas skaityti“ konkrečiam paslaugų teikėjui. Šis leidimas yra apibrėžtas kiekvieno turinio teikėjo aprašo faile.

Visa tai programa (nori prisijungti prie šios duomenų bazės) turi paprašyti šio leidimo.

Kaip aptarta anksčiau šioje „Android“ mokymo programoje, keturias operacijas galima atlikti naudojant turinio teikėją . Mes pereisime kiekvieną po vieną.

KLAUSIMAS

Dabar jūs kreipėtės į teikėją ir turite leidimą iš jo gauti duomenis. Kitas žingsnis yra sukonstruokite užklausą, kad paprašytumėte reikiamų veiksmų iš teikėjo .

Pateikiant užklausą naudojami argumentai:

vienas) Neapykanta : Jis veikia tiksliai taip, kaip paaiškinta aukščiau.

2) Projekcija: Užklausa turėtų grąžinti stulpelių rinkinį iš visos duomenų bazės lentelės . Tai vadinama projekcija. Patvirtinus nulį bus grąžinti visi stulpeliai, o tai yra neefektyvu.

3) Atrankos sąlyga: Į filtras, nurodantis, kurias eilutes grąžinti , suformatuotas kaip SQL WHERE sąlyga (išskyrus patį WHERE). Perėjus nulį bus grąžintos visos nurodyto URI eilutės.

Pvz., Jei įvedate abėcėlę (sakyk „P“) savo adresų knygos paieškos stulpelyje, tada bus grąžinta visa kontaktinė informacija, prasidedanti raide „P“. Tačiau jei nieko neįvedate paieškos juostoje, gaunamas visas kontaktų sąrašas (tokiais atvejais pasirinkimo sąlyga nustatoma kaip „nulinė“).

4) Atrankos argumentas: Galite įtraukti „? S“ į pasirinkimą, kuris bus pakeistas reikšmėmis iš „selectionArgs“ ta tvarka, kokia jos rodomos pasirinkime.

5) Rikiuoti: „SQL ORDER BY“ sąlyga (išskyrus pačią „ORDER BY“). Patvirtinus nulį bus gauti rezultatai, kurie gali būti neužsakyti.

Užklausos kodo pavyzdys:

  • Telefono numerių paieška kontaktuose
Žymeklio žymeklis = contentresolver.query (KontaktaiContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (skaičius> 0) {String contactDetails = '' while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DIS Integ.DIS Integ. (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Žymeklis phoneCursor = contentresolver.query (KontaktaiContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKONT_NUM, CommonDataKIN , nauja eilutė [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Vardas:' + vardas + ', Telefono Nr .:' + phoneNo + ''} phoneCursor.close ()}}}

ĮRAŠYMAS

Tarkime, kad norite į adresų knygą įterpti naujų kontaktų. Objektas „ContentValues“ naudojamas šiems įterpimams atlikti. Norėdami tai pasiekti, objekto raktai „ContentValue“ ir turinio teikėjo stulpeliai turi sutapti. Štai pavyzdys:

KODO PAVYZDYS Įterpti:

  • Veiksmas yra įterpti naują įrašą pavadinimu „Rajnikant“ ir numerį „9988999888“
// Operation ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .WallValue (RawVert). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.ContentNITEM_NAME_patikr. (Rajonas). Rajonas (Rajonas). Rajonas. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Telefonas.CONTENT_ITEM_TYPE) .withValue (Telefonas.NUMERUMAS (Telefonas.NUMATO) (Telefono.VALDIS (Telefonas.VALTIS) (Telefonas.VARIAS (Telefonas.VALTIS) (Telefonas.VARIAS (Telefonas.VALTIS) (Telefonas.VARIAS (Telefonas.VALTIS) (Telefonas. , Telefonas.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ATNAUJINIMAS

Norėdami atnaujinti turinio teikėją, naudojami šie argumentai:

vienas) Neapykanta: Turinio teikėjo URI

2) „ContentValues“: Čia yra reikšmės, kurios pakeistų esamus duomenis.

3) Atrankos sąlyga: Tai gali padėti pasirinkti konkrečius įrašus, kuriuos norite atnaujinti

4) Atrankos argumentas: Galite įtraukti „? S“ į pasirinkimą, kuris bus pakeistas reikšmėmis iš „selectionArgs“ ta tvarka, kokia jos rodomos pasirinkime.

Dar kartą, objekto „ContentValues“ raktai turi atitikti turinio teikėjo stulpelius priešingu atveju atnaujinimas neįvyks.

KODO PAVYZDYS:

  • Atnaujinamas telefono numeris, kurio vardas yra „Rajnikant“
Eilutė, kur = 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.Common. Telefonas.NUMBER, „9876543210“) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

IŠTRINIMAS

Trinant naudojami tie patys argumentai kaip ir atnaujinant, išskyrus argumentą „ContentValues“, kurio nereikia, nes nebus jokių pakeistų reikšmių.

KODO PAVYZDYS Ištrinti:

  • Ištrinkite kontaktą, kurio vardas yra „Rajnikant“
Eilutė, kur = 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)

Įterpimo operacijos atveju URI turi būti pagrįstas katalogu. Visais kitais atvejais URI gali būti pagrįsti ID arba katalogais.

Mes tikimės „Android“ pamoka pradedantiesiems: 5 dalis nebuvo per sunku suprasti! Daugiau apie turinio teikėjus aptarsime tolesnėse „Android“ mokymo programose. Mėgaukitės tuo metu mokydamiesi pagrindų!

Ar turite abejonių šioje „Android“ pamokoje? Klauskite mūsų.

Laimingo mokymosi!

Kuriant šią „Android“ mokymo programą buvo naudojami šie šaltiniai! Oficialūs „Android“ kūrėjai , Edureka.in

Jums taip pat gali patikti šie susiję įrašai: