Výukové programy pro Android pro začátečníky Část 4: Poskytovatel obsahu

Tento výukový program pro Android pojednává o konceptech poskytovatele obsahu. Je důležitým stavebním kamenem systému Android, který usnadňuje výměnu dat v systému Android.

V našich předchozích výukových programech pro Android pro začátečníky jsme diskutovali o prvních třech stavebních blocích systému Android: Aktivita , Úmysl a Služby . Tento článek je čtvrtý v této sérii výukových programů pro Android pro začátečníky a pojednává o poskytovateli obsahu, což je další velmi důležitá součást systému Android.

Poskytovatel obsahu je prostředníkem vašeho systému Android a usnadňuje výměnu dat mezi různými aplikacemi pro Android. Pojďme se trochu seznámit s podrobnostmi v tomto výukovém programu pro Android.





Výukový program pro Android pro začátečníky - bonus 4: Stáhněte si kód poskytovatele obsahu zde . Tento kód byste chtěli, jakmile projdete tutoriálem! :)

[dl url = ”#” class = ”eModal eModal-6 ″ title =” Stáhnout kód ”desc =” ”type =” ”align =” ”for =” download ”]



Výukové programy pro Android: Poskytovatel obsahu

Poskytovatel obsahu usnadňuje přístup do centrálního úložiště dat nebo skladu a umožňuje sdílení dat a manipulaci s daty napříč různými aplikacemi.

Zde je několik příkladů výchozích poskytovatelů obsahu v API systému Android:

Výukové programy pro Android: Výchozí poskytovatelé obsahu v systému Android



Tito poskytovatelé obsahu umožňují abstrakci uživatelů z podkladové databáze. Poskytovatelé obsahu obecně používají k ukládání podkladové databáze SQLite.

Vezměme si stále užitečný příklad staré dobré aplikace pro Facebook, která nám pomohla zjednodušit věci i v předchozích výukových programech pro Android!

Všichni jste v určitém okamžiku svého života na sociálních sítích nahráli obrázek na svou časovou osu na Facebooku, že! Jak to děláš?

Kliknutím na tlačítko Fotografie na zdi se dostanete do fotogalerie. Odtud si můžete vybrat fotografii, kterou chcete nahrát.

Po přečtení předchozích článků z Série výukových programů pro Android , víte o Činnostech a záměrech, víte tedy, že k tomu dochází:

Vaše zeď na Facebooku je „AKTIVITA“. Po kliknutí na tlačítko Fotografie se předá „ZÁMĚR“, který předá zprávu, a otevře se „POSKYTOVATEL OBSAHU“ (Fotogalerie). Fotografie se nahrává pomocí síťového nahrávání „SERVICE“.

Podívejte se na toto živé video a zjistěte, jak poskytovatel obsahu funguje uvnitř vaší aplikace na Facebooku.

Proč systém Android potřebuje poskytovatele obsahu?

Potřeba poskytovatelů obsahu vyvstává, protože databáze vytvořená v jedné aplikaci není viditelná pro druhou aplikaci.

Vytváření a ukládání databáze v různých aplikacích pomocí SQLite je jednoduché, problém však je, databáze v systému Android je soukromá pro aplikaci, která ji vytváří . V systému Android neexistuje žádná společná oblast úložiště, ke které má přístup každá aplikace. Proto pro různé aplikace pro použití databáze potřebuje systém Android rozhraní, které umožňuje takovou výměnu dat mezi aplikacemi a mezi procesy. Tady hraje poskytovatel obsahu.

Opravdu potřebuji poskytovatele obsahu?

1) Vy nepotřebujete vyvíjet svého vlastního poskytovatele, pokud chcete soukromou databázi pro konkrétní aplikaci (tato databáze by nebyla přístupná jiným aplikacím než té, která ji vytvořila).

2) Ty však potřebujete vlastního poskytovatele, který vám poskytne návrhy na vlastní vyhledávání ve vašem vlastním aplikačním systému.

3) Také byste potřebovali poskytovatele obsahu ke kopírování a vkládání komplexních dat z vaší aplikace do jiných aplikací.

Jaké jsou operace podporované poskytovatelem obsahu?

Poskytovatelé obsahu podporují následující základní operace:

jeden) Dotaz: Dotazy na poskytovatele obsahu pro všechny objekty na základě zadaného identifikátoru URI.

2) Vymazat: Odstraní zadané objekty z databáze poskytovatele obsahu.

3) Aktualizace: Provádí aktualizace objektů v databázi.

4) Vložit: Vloží nový objekt do databáze.

Kroky k provedení operace v Poskytovateli obsahu

Krok 1: Přístup k poskytovateli obsahu

Objekt klienta ContentResolver slouží k přístupu k datům od poskytovatele obsahu. Komunikuje s objektem poskytovatele, který zase přijímá požadavek na přístup k datům a vrací požadované výsledky. Rozhraní pro výměnu dat poskytované poskytovatelem a objektem klienta poskytovatele umožňuje komunikaci napříč různými procesy / aplikacemi.

Aplikace, která potřebuje přístup k databázi, to musí deklarovat a požádat o oprávnění ve svém souboru manifestu. To by bylo podrobně popsáno v našich následujících výukách pro Android.

Identifikátor URI obsahu

Identifikátor URI obsahu je jedním z argumentů použitých k identifikaci dat u poskytovatele. Má čtyři části:

jeden) Systém: Schéma pro poskytovatele obsahu má konstantní hodnotu: „content“.

2) Orgán: Je to symbolické jméno poskytovatele a je pro každého jedinečné. Takto vybíráme požadovaného poskytovatele obsahu ze seznamu tolika.

3) Cesta: Cesta pomáhá odlišit požadovaná data od úplné databáze . Poskytovatel obsahu protokolu hovorů například rozlišuje mezi zmeškanými hovory, přijatými hovory atd. Pomocí různých cest.

4) ID: Není to povinná součást a nemusí být přítomna v URI, ale pokud je přítomna, měla by být číselná. Například, chcete-li získat přístup ke konkrétnímu hudebnímu souboru od svého poskytovatele mediálního obsahu, zadejte také ID .

Proces

Pomocí oprávnění poskytovatele identifikuje ContentResolver správného poskytovatele obsahu (protože oprávnění je pro každého poskytovatele obsahu jedinečné). Poté se složka cesty URI používá k výběru správné (požadované) datové tabulky. V případě, že je k dispozici ID, poskytovatel by věděl, jaké přesné údaje jsou požadovány.

URI jsou dvou typů:

Kromě toho mohou mít URI také omezující informace.

Krok 2: Jak načíst data od poskytovatele obsahu

Přestože má ContentResolver nyní přístup k datové tabulce, nemůže načíst požadovaná data, pokud to aplikace nemá „Oprávnění ke čtení“ pro konkrétního poskytovatele. Toto oprávnění je definováno v souboru manifestu každého poskytovatele obsahu.

Vše, co aplikace (který chce přistupovat k této databázi) musí požádat o toto povolení.

Nyní, jak je popsáno výše v tomto výukovém programu pro Android, čtyři operace lze provést pomocí poskytovatele obsahu . Projdeme každý jeden po druhém.

DOPYT

Nyní jste získali přístup k poskytovateli a máte oprávnění k načtení dat z něj. Dalším krokem je vytvořte dotaz a vyžádejte si požadovanou akci od poskytovatele .

Zde jsou argumenty použité při dotazování:

jeden) NENÁVIST : Funguje přesně tak, jak je vysvětleno výše.

2) Projekce: Dotaz by měl vrátit sadu sloupců z celé databázové tabulky . Toto se nazývá projekce. Předáním hodnoty null se vrátí všechny sloupce, což je neefektivní.

3) Klauzule o výběru: NA filtr deklarující, které řádky se mají vrátit , formátovaný jako klauzule WHERE SQL (kromě samotné WHERE). Předáním hodnoty null se vrátí všechny řádky pro daný identifikátor URI.

Pokud například zadáte do vyhledávacího sloupce v adresáři abecedu (řekněme „P“), vrátí se všechny kontaktní údaje začínající písmenem „P“. Pokud však do vyhledávacího pole nic nezadáte, načte se kompletní seznam kontaktů (v takových případech je klauzule pro výběr nastavena na „null“).

4) Argument výběru: Do výběru můžete zahrnout „? S“, které budou nahrazeny hodnotami z selectionArgs, v pořadí, v jakém se objeví ve výběru.

5) Pořadí řazení: Klauzule SQL ORDER BY (kromě samotného ORDER BY). Předáním hodnoty null načtete výsledky, které mohou být neuspořádané.

PŘÍKLAD KÓDU pro dotazování:

  • Hledání telefonních čísel v Kontaktech
Cursor 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ázev řetězce = cursor.getString (cursor .getColumnIndex (KontaktyContract.Contacts.DISPLAY_NAME)) int numCont. (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 + = 'Jméno:' + jméno + ', Telefonní číslo:' + phoneNo + ''} phoneCursor.close ()}}}

VLOŽENÍ

Předpokládejme, že chcete do svého adresáře vložit nové kontakty. Objekt ContentValues se používá k provedení těchto vložení. K dosažení tohoto cíle se klíče objektu ContentValue a sloupce poskytovatele obsahu musí shodovat. Zde je příklad:

PŘÍKLAD KÓDU PRO VLOŽENÍ:

  • Operace spočívá v vložení nové položky s názvem „Rajnikant“ a číslem „9988999888“
// Operace ArrayList ops = new 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). “ ) 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)

AKTUALIZACE

K aktualizaci poskytovatele obsahu se používají následující argumenty:

jeden) NENÁVIST: URI poskytovatele obsahu

2) Hodnoty obsahu: Obsahuje hodnoty, které by nahradily stávající data.

3) Klauzule o výběru: To může pomoci vybrat konkrétní záznamy k aktualizaci

4) Argument výběru: Do výběru můžete zahrnout „? S“, které budou nahrazeny hodnotami z selectionArgs, v pořadí, v jakém se objeví ve výběru.

Ještě jednou klíče objektu ContentValues ​​se musí shodovat se sloupci v poskytovateli obsahu jinak by k aktualizaci nedošlo.

abstrakce dat v jazyce C ++

PŘÍKLAD KÓDU K aktualizaci:

  • Aktualizace telefonního čísla s názvem „Rajnikant“
Řetězec 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)

VYMAZÁNÍ

Odstranění používá stejné argumenty jako aktualizace s výjimkou argumentu ContentValues, který není vyžadován, protože zde nebudou žádné nahrazené hodnoty.

PŘÍKLAD KÓDU PRO VYMAZÁNÍ:

  • Smažte kontakt, jehož jméno je „Rajnikant“
Řetězec 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 případě operace Vložit musí být URI založen na adresáři. Ve všech ostatních případech mohou být identifikátory URI buď založené na ID, nebo na adresáři.

Doufáme Výukový program pro Android pro začátečníky: Část 5 nebylo příliš těžké pochopit! Více o poskytovatelích obsahu budeme diskutovat v následujících výukových programech pro Android. Do té doby si užívejte základní znalosti!

Máte v tomto výukovém programu pro Android nějaké pochybnosti? Zeptej se nás.

Šťastné učení!

Při vytváření tohoto výukového programu pro Android byly použity následující zdroje! Oficiální vývojáři systému Android , Edureka.in

Také by se vám mohly líbit tyto související příspěvky: