Android oktatóanyagok kezdőknek 4. rész: Tartalomszolgáltató



Ez az Android oktatóanyag a tartalomszolgáltató fogalmait tárgyalja. Az Android fontos építőköve, megkönnyítve az adatcserét az Android rendszerben.

Korábbi Android kezdőknek szóló oktatóanyagainkban megvitattuk az Android első három építőelemét: Tevékenység , Elszánt és Szolgáltatások . Ez a cikk a negyedik ebben a kezdőknek szánt Android-oktatósorozatban, és a Tartalomszolgáltatót tárgyalja, amely az Android-rendszer másik nagyon fontos eleme.

A tartalomszolgáltató az Android rendszer közvetítője, megkönnyítve a különböző Android-alkalmazások közötti adatcserét. Vessünk egy kicsit bele ennek részleteibe ebben az Android oktatóanyagban.





Android oktatóanyag kezdőknek - 4 bónusz: Töltse le a tartalomszolgáltató kódját innen . Akkor szeretné ezt a kódot, ha már végignézte az oktatóanyagot! :)

[dl url = ”#” class = ”eModal eModal-6” title = ”Letöltési kód” desc = ”” type = ”” align = ”” for = ”letöltés”]



Android oktatóanyagok: Tartalomszolgáltató

A tartalomszolgáltató megkönnyíti a hozzáférést egy központi adattárhoz vagy raktárhoz, hogy lehetővé tegye az adatok megosztását és az adatok manipulálását a különböző alkalmazások között.

Íme néhány példa az alapértelmezett tartalomszolgáltatókra az Android rendszer API-jában:

Android oktatóanyagok: Alapértelmezett tartalomszolgáltatók az Android rendszerben



Ezek a tartalomszolgáltatók lehetővé teszik a felhasználó számára az absztrakt adatbázis absztrakcióját. A tartalomszolgáltatók általában az SQLite-t használják az alapul szolgáló adatbázis tárolására.

Vegyünk egy örökké hasznos példát a jó öreg Facebook alkalmazásra, amely segített nekünk a korábbi Android oktatóanyagok egyszerűsítésében!

Mindannyian valamikor a közösségi hálózatok életében feltöltöttek egy képet a Facebook idővonalára, ugye! Hogyan csinálod?

A falon található Fotó gombra kattintva eljuthat a fotógalériába. Innen kiválaszthat egy feltöltendő fényképet.

Az előző cikkek elolvasása után Android oktatóanyagok sorozat , ezért ismeri a Tevékenységeket és a Szándékokat, ezért tudja, hogy ez történik:

Facebook-falad „TEVÉKENYSÉG”. Amikor rákattint a Fotó gombra, átmegy egy „INTENT”, amely továbbítja az üzenetet, és megnyílik a „CONTENT PROVIDER” (Photo Gallery). A fénykép feltöltése a „SERVICE” hálózati feltöltéssel történik.

mit jelent a függelék Java-ban

Nézze meg ezt az élő videót, hogy megtudja, hogyan működik a tartalomszolgáltató a Facebook alkalmazásában.

Miért van szükség az Android rendszerre tartalomszolgáltatókra?

A tartalomszolgáltatókra azért van szükség, mert az egy alkalmazásban létrehozott adatbázis egy második alkalmazás számára nem látható.

Az SQLite használatával egyszerű adatbázisokat létrehozni és tárolni különböző alkalmazásokban, azonban a probléma ez, egy androidos adatbázis privát az azt létrehozó alkalmazás számára . Az Androidban nincs olyan közös tárhely, amelyhez minden alkalmazás hozzáférhet. Ezért ahhoz, hogy a különböző alkalmazások használhassanak egy adatbázist, az Android rendszernek szüksége van egy interfészre, amely lehetővé teszi az ilyen alkalmazások közötti és folyamatközi adatcserét. Itt játszik a tartalomszolgáltató.

Szükségem van egy tartalomszolgáltatóra?

1) Te nem kell saját szolgáltatót fejlesztenie, ha privát adatbázist szeretne egy adott alkalmazáshoz (ez az adatbázis csak az azt létrehozó alkalmazások számára lenne hozzáférhető).

2) Te azonban szükség van egy egyedi szolgáltatóra egyedi keresési javaslatok megadásához saját alkalmazási rendszerében.

3) Szüksége lenne egy tartalomszolgáltatóra is összetett adatok másolása és beillesztése az alkalmazásból más alkalmazásokba.

Milyen műveleteket támogat a tartalomszolgáltató?

A tartalomszolgáltatók a következő alapvető műveleteket támogatják:

egy) Lekérdezés: Lekérdezi a tartalomszolgáltatót az összes objektumra, a megadott URI alapján.

2) Töröl: Törli a megadott objektumokat a Tartalomszolgáltató adatbázisából.

3) Frissítés: Frissíti az adatbázis objektumait.

4) Beillesztés: Új objektumot illeszt be az adatbázisba.

A műveletek végrehajtásának lépései a Tartalomszolgáltatóban

1. lépés: Hozzáférés a tartalomszolgáltatóhoz

ContentResolver kliens objektum a tartalomszolgáltató adatainak elérésére szolgál. Kommunikál a szolgáltató objektummal, amely viszont elfogadja az adatokhoz való hozzáférés iránti kérelmet, és visszaadja a kívánt eredményeket. A szolgáltató és a szolgáltató kliens objektuma által biztosított adatcsere interfész lehetővé teszi a kommunikációt a különböző folyamatok / alkalmazások között.

Az alkalmazásnak, amelynek hozzáférnie kell az adatbázishoz, ezt nyilatkoznia kell, és engedélyeket kell kérnie a jegyzékfájljában. Ezt részletesen a későbbi Android-oktatóanyagok fogják megvitatni.

Tartalmi URI

A tartalmi URI az egyik érv, amelyet az adatok azonosítására használnak a szolgáltatóban. Négy részből áll:

egy) Rendszer: A tartalomszolgáltató sémájának állandó értéke van: „tartalom”.

2) Hatóság: Ez a szolgáltató szimbolikus neve, és mindegyiknél egyedi. Így emeljük ki a kívánt tartalomszolgáltatót egy ilyen sok közül.

3) Pálya: Pálya segít megkülönböztetni a szükséges adatokat a teljes adatbázistól . Például a hívásnapló-tartalomszolgáltató különböző elérési utak segítségével különbözteti meg a nem fogadott hívásokat, a fogadott hívásokat stb.

4) Azonosító: Nem kötelező összetevő, és előfordulhat, hogy nem szerepel az URI-ben, de ha van, akkor numerikusnak kell lennie. Például, ha egy adott zenefájlhoz szeretne hozzáférni a médiatartalom-szolgáltatótól, akkor meg kell adnia egy azonosítót is .

A folyamat

A szolgáltatói jogosultság felhasználásával a ContentResolver azonosítja a megfelelő tartalomszolgáltatót (mivel a jogosultság minden tartalomszolgáltató esetében egyedi). Ezt követően az URI elérési útjának összetevőjét választjuk ki a helyes (kért) adattáblához. Ha azonosító van, a szolgáltató tudná, hogy pontosan mely adatokat kérnek.

Az URI-k kétféle típusúak:

Ezenkívül az URI-k korlátozó információkkal is rendelkezhetnek.

2. lépés: Hogyan lehet adatokat lekérni egy tartalomszolgáltatótól

Annak ellenére, hogy a ContentResolver már rendelkezik hozzáféréssel az adattáblához, csak akkor tudja lekérni a szükséges adatokat, ha az alkalmazás rendelkezik „Olvasási hozzáférési engedély” az adott szolgáltató számára. Ezt az engedélyt az egyes tartalomszolgáltatók jegyzékfájlja határozza meg.

Minden, ami egy alkalmazás (amely hozzáférni akar ehhez az adatbázishoz) meg kell kérnie ezt az engedélyt.

Most, ahogy korábban említettük ebben az Android oktatóanyagban, négy művelet hajtható végre egy tartalomszolgáltató segítségével . Mindegyiket egyenként át fogjuk nézni.

LEKérdezés

Most hozzáférett a szolgáltatóhoz, és engedélye van adatok lekérésére. A következő lépés az állítsa össze a lekérdezést, hogy kérje a szükséges műveletet a szolgáltatótól .

A lekérdezés során használt argumentumok:

egy) GYŰLÖL : Pontosan úgy működik, ahogyan azt a fentiekben kifejtettük.

2) Kivetítés: A lekérdezésnek adjon vissza egy oszlopkészletet a teljes adatbázis-táblából . Ezt nevezzük vetítésnek. A null átadásával az összes oszlop visszatér, ami nem hatékony.

3) Kiválasztási záradék: NAK NEK szűrő, amely deklarálja, hogy mely sorokat adja vissza , SQL WHERE záradékként formázva (kivéve magát a WHERE-t). A null átadásával az adott URI minden sorát visszaadja.

Például, ha beír egy ábécét (mondjuk „P”) a címjegyzék keresési oszlopába, akkor az az összes „P” betűvel kezdődő névjegyet adja vissza. Ha azonban nem ír be semmit a keresősávba, akkor a partnerek teljes listája lekérésre kerül (a kiválasztási záradék ilyenkor „null” értékre van állítva).

4) Kiválasztási érv: A kiválasztásba felveheti a „?” Jeleket, amelyeket a selectionArgs értéke vált fel, abban a sorrendben, ahogyan azok megjelennek a kiválasztásban.

5) Sorrend: SQL ORDER BY záradék (az ORDER BY BY kivételével). A null átadásával az eredmények rendezetlenek lehetnek.

KÓDPÉLDA a lekérdezéshez:

  • Telefonszámok keresése a Névjegyzék menüben
Kurzor kurzor = 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) Karakterlánc neve = cursor.getString (kurzor .getColumnIndex (ContactsContract.Contacts.Contacts.DIS (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Kurzor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKIN , új karakterlánc [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Név:' + név + ', Telefonszám:' + phoneNo + ''} phoneCursor.close ()}}}

BETÖLTÉS

Tegyük fel, hogy új névjegyeket szeretne beilleszteni a címjegyzékébe. ContentValues ​​objektum ezeket a beillesztéseket használják. Ennek eléréséhez a ContentValue objektumkulcsoknak és a Content Provider oszlopoknak meg kell egyezniük. Íme egy példa erre:

KÓDPÉLDA beillesztésre:

  • A művelet egy új bejegyzés beillesztése „Rajnikant” és „9988999888” számmal
// Operation ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .WallValue (RawValue). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StrukturáltNév.CONTENT_ITEM_TYPIS) Rajz (Rajz) (Rajz) (Rajz) ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .WithValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUMBER). , Telefon.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

FRISSÍTÉS

A tartalomszolgáltató frissítéséhez a következő argumentumokat kell használni:

egy) GYŰLÖL: A tartalomszolgáltató URI-je

2) ContentValues: Ez tartalmazza azokat az értékeket, amelyek helyettesítik a meglévő adatokat.

3) Kiválasztási záradék: Ez segíthet kiválasztani a frissíteni kívánt konkrét rekordokat

4) Kiválasztási érv: A kiválasztásba felveheti a „?” Jeleket, amelyeket a selectionArgs értéke vált fel, abban a sorrendben, ahogyan azok megjelennek a kiválasztásban.

Még egyszer, a A ContentValues ​​objektum kulcsainak meg kell egyezniük a Tartalomszolgáltató oszlopaival különben a frissítés nem következne be.

KÓDPÉLDA frissítéshez:

  • A „Rajnikant” nevű telefonszám frissítése
Karakterlánc, ahol = 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. Telefon.SZÁM, „9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

TÖRLÉS

A törlés ugyanazokat az argumentumokat használja, mint a frissítés, kivéve a ContentValues ​​argumentumot, amelyre nincs szükség, mivel nem lesznek helyettesített értékek.

KÓDPÉLDA törlésre:

  • Törölje azt a névjegyet, ahol a neve „Rajnikant”
Karakterlánc, ahol = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = új karakterlánc [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ) .applyBatch (ContactsContract.AUTHORITY, ops)

Beszúrás esetén az URI-nek könyvtáralapúnak kell lennie. Az összes többi esetben az URI lehet azonosító vagy könyvtár alapú.

Reméljük Android oktatóanyag kezdőknek: 5. rész nem volt túl nehéz megérteni! A későbbi Android oktatóanyagokban többet fogunk megvitatni a tartalomszolgáltatókról. Élvezze addig az alapok elsajátítását!

Kétségei vannak ebben az Android oktatóanyagban? Kérdezz minket.

Boldog tanulást!

A következő forrásokat használták fel az Android oktatóanyag létrehozásához! Hivatalos Android-fejlesztők , Edureka.in

Ezeknek a kapcsolódó bejegyzéseknek is tetszhetnek: