1. Mobil qurilmalar uchun dasturlar Ishlab chiqish muhiti


Mavzu: Kontent-provayder deklaratsiyasi



Download 27,79 Mb.
bet13/18
Sana24.09.2022
Hajmi27,79 Mb.
#850101
1   ...   10   11   12   13   14   15   16   17   18
Bog'liq
Amaliyot mobil qurulmalarni dasturlash

Mavzu: Kontent-provayder deklaratsiyasi
Reja:
1. Kontent provayderi nima
2. O'rnatilgan provayderlar
Kontent provayderi yoki "Kontent provayderi" ma'lumotlarni o'rab oluvchi o'ramdir. Agar ilovangiz SQLite ma'lumotlar bazasidan foydalansa, unda faqat sizning ilovangiz unga kirish huquqiga ega. Ammo ma'lumotlarni almashish maqsadga muvofiq bo'lgan holatlar mavjud. Oddiy misol - telefon kitobidagi kontaktlaringiz ham ma'lumotlar bazasida, lekin ilovangiz kontaktlar ro'yxatini ham ko'rsatishi uchun siz ma'lumotlarga kirishni xohlaysiz. Siz boshqa birovning ilovasining ma'lumotlar bazasiga kirish imkoniga ega bo'lmaganingiz uchun, har bir kishi o'z ma'lumotlarini almashish imkonini beradigan maxsus mexanizm ixtiro qilindi.
Kontent provayderi faqat qurilmada ishlaydigan boshqa ilovalar bilan ma'lumotlarni almashishni xohlaganingizda foydalaniladi. Ammo hozir ma'lumot almashishni rejalashtirmagan bo'lsangiz ham, har qanday holatda ham ushbu usulni amalga oshirish haqida o'ylashingiz mumkin.

Android-da ma'lumotlar manbalarini (yoki ma'lumot provayderlarini) REST ko'rish holatini kontent provayderlari deb ataladigan abstraktsiyalarda uzatish orqali ifodalash mumkin. SQLite ma'lumotlar bazasi kontent provayderiga o'ralishi mumkin. Kontent provayderidan ma'lumotlarni olish yoki unda yangi ma'lumotlarni saqlash uchun siz REST-ga o'xshash URI to'plamidan foydalanishingiz kerak. Misol uchun, agar siz raqamli kutubxonani o'z ichiga olgan kontent provayderidan kitoblar to'plamini olishingiz kerak bo'lsa, sizga shunday URI kerak bo'ladi (asosan kitoblar jadvalidagi barcha yozuvlarni olish so'rovi):
tarkib: //com.android.book.bookprovider/books
Kutubxonadan ma'lum bir kitobni olish uchun (masalan, № 23 kitob) quyidagi URI-dan foydalaniladi (jadvalning alohida qatori):
tarkib: //com.android.book.bookProvider/books/23
Qurilmada ishlaydigan har qanday dastur ma'lumotlarga kirish va manipulyatsiya qilish uchun ushbu URI'lardan foydalanishi mumkin. Shunday qilib, kontent provayderlari bir nechta ilovalarda ma'lumotlarni almashishda muhim rol o'ynaydi.
O'rnatilgan provayderlar
Android o'rnatilgan kontent provayderlaridan foydalanadi ( android.provider to'plami ). Bu erda kontent provayderlarining qisman ro'yxati:
Brauzer
CallLog
Kontaktlar
Odamlar
Telefonlar
Rasmlar
Guruhlar
MediaStore
Audio
Albomlar
Rassomlar
Janrlar
Pleylistlar
Tasvirlar
Eskizlar
Video
Sozlamalar
Ma'lumotlar bazalari ierarxiyaning yuqori sathlarida, jadvallar esa quyida joylashgan. Masalan, Brauzer, CallLog, Contacts, MediaStore va Settings sotuvchi shaklida inkapsullangan alohida SQLite ma'lumotlar bazalaridir. Odatda, bu SQLite ma'lumotlar bazalari ma'lumotlar bazasi kengaytmasiga ega va faqat amalga oshirish paketidan foydalanish mumkin. Ushbu paketdan tashqarida ma'lumotlar bazasiga har qanday kirish kontent provayder interfeysi orqali amalga oshiriladi.
O'z kontent provayderingizni yaratish
O'z kontent provayderingizni yaratish uchun siz mavhum ContentProvider sinfidan meros olishingiz kerak :

public class MyContentProvider extends ContentProvider {


}
Sinf so'rov () , kiritish () , yangilash () , o'chirish () , getType () , onCreate () mavhum usullarni amalga oshirishi kerak . An'anaviy ma'lumotlar bazasini yaratish bilan bir qator o'xshashliklar mavjud.
Bundan tashqari , ism va vakolatli atributlar bilan provayder yorlig'i yordamida manifestda ro'yxatga olinishi kerak . Rasmiylari tegi bazasi URI yo'lini aniqlash uchun ishlatiladi ContentResolver bilan ta'sir o'tkazish uchun ma'lumotlar bazasini topishingiz mumkin. Bu teg noyob bo'lishi kerak, shuning uchun boshqa ilovalar bilan chalkashmaslik uchun paket nomidan foydalanish tavsiya etiladi, masalan:

android:name:".MyContentProvider"


android:authorities="ru.alexanderklimov.provider.notepad" />
Kontent provayderining manbasi saytning domen nomi bilan bir xil. Agar manba allaqachon ro'yxatdan o'tgan bo'lsa, ushbu kontent provayderlari tegishli manba prefiksi bilan boshlangan giperhavolalar bilan ifodalanadi:

content://ru.alexanderklimov.provider.notepad/


Shunday qilib, veb-saytlar kabi kontent provayderlari boshlang'ich URL manzili sifatida ishlaydigan asosiy domen nomiga ega.
Shuni ta'kidlash kerakki, Android tomonidan ishlatiladigan kontent provayderlari to'liq bo'lmagan manba nomiga ega bo'lishi mumkin. Toʻliq manba nomidan faqat uchinchi tomon kontent provayderlari bilan foydalanishni tavsiya qilamiz. Shuning uchun, siz ba'zan kontaktlar kabi bir so'zli kontent provayderlariga duch kelishingiz mumkin, bunday kontent provayderining to'liq nomi esa com.google.android.contacts .
Kontent provayderlari ma'lumotlarni topish va ular bilan ishlash uchun REST-ga o'xshash giperhavolalardan ham foydalanadilar. Yuqorida tavsiflangan ro'yxatga olish holatida, NotePadProvider ma'lumotlar bazasidagi katalog yoki yozuvlar to'plamini ko'rsatish uchun mo'ljallangan Yagona Resurs identifikatori shunday nomlanadi:

content://ru.alexanderklimov.provider.notepad/notes


Bitta yozuvni aniqlash uchun URI quyidagicha ko'rinadi:

content://ru.alexanderklimov.provider.notepad/notes/#


# belgisi ma'lum bir yozuvga (jadval qatoriga) mos keladi. Quyida kontent provayderlarida mavjud bo'lishi mumkin bo'lgan yana bir nechta URI misollari keltirilgan:
content://media/internal/images
content://media/external/images
content://contacts/people/
content://contacts/people/23
E'tibor bering, kontent provayderlari tarkibi: // media va kontent: // bu yerdagi kontaktlar to'liq emas. Buning sababi shundaki, ushbu kontent provayderlari uchinchi tomon emas va Android tomonidan boshqariladi.
Content Uniform Identifier (Content URI) tuzilishi
Kontent provayderidan ma'lumotlarni olish uchun URI-ni faollashtirish kifoya. Biroq, kontent provayderi bilan ishlashda, shu tarzda topilgan ma'lumotlar qatorlar va ustunlar to'plami sifatida taqdim etiladi va Android kursor ob'ektini hosil qiladi . Keling, ma'lumotlarni olish uchun ishlatilishi mumkin bo'lgan URI tuzilishini ko'rib chiqaylik.
Android Content URI’lari HTTP URI’lariga o‘xshaydi, lekin ular kontentdan boshlanadi va shunday tuzilgan:

content://*/*/*


yoki

content://authority-name/path-segment1/path-segment2/etc...


Ma'lumotlar bazasida 23-raqamli yozuvni aniqlaydigan misol URI:

content://ru.alexanderklimov.provider.notepad/notes/23


Kontentdan so'ng : URIda yagona manba identifikatori mavjud bo'lib, u tegishli registrda kontent provayderini topish uchun ishlatiladi. ru.alexanderkimov.provider.notepad URI qismi manba hisoblanadi.
/ eslatmalar / 23 - har bir alohida kontent provayderiga xos bo'lgan yo'l bo'limi. Yo'lning eslatmalari va 23 bo'limi yo'l segmentlari deb ataladi. Kontent provayderining funktsiyalaridan biri URI tarkibidagi bo'lim va yo'l segmentlarini hujjatlashtirish va sharhlashdir.
UriMatcher
Provayder UriMatcher sinfining maxsus ob'ektiga ega , u tashqaridan ma'lumotlarni oladi va olingan ma'lumotlarga asoslanib, ma'lumotlar bazasiga kerakli so'rovni yaratadi.
Provayder keyingi harakatlarni tushunadigan maxsus konstantalarni o'rnatishingiz kerak. Agar bitta jadval ishlatilsa, odatda ikkita konstanta ishlatiladi - har qanday ikkita butun son, masalan, jadval uchun 100 va jadvalning alohida qatori uchun 101. Uni sxematik tarzda quyidagicha ko'rsatish mumkin.

URI namunasi

Kod

Kontent nomi

tarkib: //ru.alexanderkimov.provider.notepad/notes

100

QAYDLAR

tarkib: //ru.alexanderkimov.provider.notepad/notes/#

101

NOTES_ID

Butun jadval (kod 100) yoki ma'lum bir qator (kod 101) haqida ma'lumot olishni xohlaymizmi - kalit yordamida kodda filial yaratiladi.
Ilova murakkab bo'lishi va bir nechta jadvallarga ega bo'lishi mumkin. Keyin ko'proq doimiylar bo'ladi. Masalan, bu kabi.

URI namunasi

Kod

Kontent nomi

tarkib: //com.android.contacts/contacts

1000

ALOQALAR

tarkib: //com.android.contacts/contacts/#

1001

CONTACTS_ID

Tarkib: //com.android.contacts/lookup/*

1002

CONTACTS_LOOKUP

tarkib: //com.android.contacts/lookup/*/#

1003

CONTACTS_LOOKUP_ID

...

...

...

tarkib: //com.android.contacts/data

3000

DATA

Tarkib: //com.android.contacts/data/#

3001

DATA_ID

...

...

...

Funt belgisi (#) raqamni, yulduzcha (*) esa qatorni bildiradi.
So'rov () usuli
ContentProvider sinfi uchun so'rov () usuli talab qilinadi . Agar biz ma'lumotlar bazasiga kirish uchun kontent provayderidan foydalansak, unda bir xil nomdagi usul SQLiteDatabase chaqiriladi . Usulning tarkibi deyarli bir xil.

@Override


public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

...

cursor = database.query(GuestEntry.TABLE_NAME, projection, selection, selectionArgs,
null, null, sortOrder);
...
}
Tez maslahat:

URI: content://com.example.android.cathouse/cats/3


Projection: {"_id", "name"}
Selection: "_id=?"
Selection Args: {"3"}
SQL bayonotiga mos keladi.

SELECT id, name FROM cats WHERE _id=3


Usul argumentlari uchun kerakli ma'lumotlarni dasturiy ravishda olishingiz kerak. ContentUris.parseId (uri) usuliga e'tibor bering , u manzilning oxirgi segmentini, bizning holatlarimizda Tanlash Arglari uchun 3 raqamini qaytaradi.
Insert () usuli
Insert () usuli ikkita parametrni o'z ichiga oladi - URI va ContenValues . Birinchi parametr so'rov () usulida bo'lgani kabi ishlaydi . Ikkinchisi jadvalning kerakli ustunlariga ma'lumotlarni kiritadi.
Qo'shish uchun insertGuest () yordamchi usuli qo'llaniladi .
Androidda MIME turlarini tuzish
Xuddi veb-sayt ma'lum bir giperhavola uchun MIME turini qaytarganidek (bu brauzerga berilgan kontent turini ko'rish uchun dasturni faollashtirish imkonini beradi), kontent provayderi ma'lum URI uchun MIME turini qaytarish imkoniyatiga ega. Bu sizga ma'lumotlarni ko'rishda ma'lum miqdorda moslashuvchanlikni beradi. Agar biz qanday turdagi ma'lumotlarni olishimizni bilsak, unda biz bunday ma'lumotlarni ko'rsatish uchun mo'ljallangan bir yoki bir nechta dasturlarni tanlashimiz mumkin. Misol uchun, agar kompyuterning qattiq diskida matnli fayl mavjud bo'lsa, biz uni ko'rsatishga qodir bo'lgan bir nechta tahrirlovchilarni tanlashimiz mumkin.
MIME turlari Android-da HTTP-dagi kabi ishlaydi. Siz kontent provayderidan u qo'llab-quvvatlaydigan ma'lum URI ning MIME turini so'raysiz va kontent provayderi qabul qilingan standartlarga muvofiq MIME turini aniqlaydigan ikki qismli belgilar ketma-ketligini qaytaradi.
MIME belgisi ikki qismdan iborat: turi va pastki turi. Quyida ba'zi taniqli MIME turi va pastki turdagi juftliklariga misollar keltirilgan:
matn / html
text / css
text / xml
image / jpeg
audio / mp3
video / mp4
ilova / pdf
ilova / msword
Ro'yxatdan o'tgan asosiy tarkib turlari:
ilova
audio
tasvirli
xabar
modeli
ko'p qismli
matnli
video
Android MIME turlarini aniqlash uchun shunga o'xshash printsipdan foydalanadi. Android MIME turlaridagi vnd yozuvi bu turlar va quyi turlar nostandart, ishlab chiqaruvchiga xos ekanligini bildiradi. Androidda o'ziga xoslikni ta'minlash uchun turlar va pastki turlar domen nomlari kabi bir nechta komponentlar yordamida ajratiladi. Bundan tashqari, har bir kontent turiga mos keladigan Android MIME turlari ikkita shaklda bo'ladi: bir postli va ko'p postli.
MIME turlari Android-da, xususan, maqsadlar bilan ishlashda, tizim MIME ma'lumotlar turidan qaysi hodisani faollashtirish kerakligini aniqlaganda keng qo'llaniladi. MIME turlari har doim kontent provayderlari tomonidan tegishli URIlar asosida taqdim etiladi. MIME turlari bilan ishlashda uchta narsani yodda tutish kerak.
Turi va pastki turi ular vakili bo'lgan kontent turi uchun yagona bo'lishi kerak. Bu odatda elementlarning katalogi yoki bitta element. Android kontekstida katalog va element o'rtasidagi farq birinchi qarashda ko'rinadigan darajada aniq bo'lmasligi mumkin.
Agar tur yoki pastki tur standart bo'lmasa, u vnd bilan prefiks bilan qo'shilishi kerak (odatda ma'lum turdagi yozuvlar uchun).
Odatda turlar va subtiplar sizning ehtiyojlaringizga ko'ra nom maydoniga ega bo'ladi.
Bu fikrni yana bir bor ta'kidlash kerak: Android-da kursor buyrug'i bilan qaytariladigan elementlar to'plami uchun asosiy MIME turi har doim vnd.android.cursor.dir bo'lishi kerak va kursor buyrug'i orqali topilgan bitta element uchun asosiy MIME turi bo'lishi kerak . Android vnd. android.cursor.item shaklida bo'lishi kerak . Agar biz pastki tur haqida gapiradigan bo'lsak, u holda vnd.googl.note bilan bo'lgani kabi, tebranish xonasi kengayadi ; vnd komponentidan keyin . o'zingizga mos keladigan har qanday kichik turni erkin tanlashingiz mumkin.
ContentResolver
Ilovaga tegishli bo'lgan har bir Kontent ob'ekti getContentResolver () usuli orqali olinishi mumkin bo'lgan ContentResolver sinfining namunasini o'z ichiga oladi .

ContentResolver contentResolver = getContentResolver();


ContentResolver faollikdan kontent provayderiga so'rovlar va operatsiyalarni amalga oshirish uchun ishlatiladi. ContentResolver mavjud o'xshash so'rovlar va bitimlar, usullarini o'z ichiga oladi ContentProvider . ContentResolver har qanday talab faqat oladi - u bilan o'zaro hamkorlik kontent provayderi amalga oshirish haqida bilish kerak bo'lgan emas URI yo'lini ko'rsatadi, deb ContentProvider kirish uchun.

Download 27,79 Mb.

Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   18




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish