W naszych poprzednich samouczkach dotyczących Androida dla początkujących omawialiśmy pierwsze trzy elementy składowe Androida: Czynność , Zamiar i Usługi . Ten artykuł jest czwartym z tej serii samouczków na Androida dla początkujących i omawia dostawcę treści, który jest kolejnym bardzo ważnym elementem systemu Android.
Dostawca treści to pośrednik systemu Android, ułatwiający wymianę danych między różnymi aplikacjami na Androida. Omówmy trochę szczegóły tego w tym samouczku Androida.
Samouczek Androida dla początkujących-4 Bonus: Pobierz kod dostawcy treści tutaj . Potrzebujesz tego kodu po przejściu przez samouczek! :)
[dl url = ”#” class = ”eModal eModal-6 ″ title =” Download Code ”desc =” ”type =” ”align =” ”for =” download ”]
Samouczki na Androida: dostawca treści
Dostawca treści ułatwia dostęp do centralnego magazynu lub hurtowni danych, umożliwiając udostępnianie i manipulowanie danymi w różnych aplikacjach.
Oto kilka przykładów domyślnych dostawców treści w interfejsie API systemu Android:
Ci dostawcy zawartości umożliwiają abstrakcji użytkownika z bazowej bazy danych. Ogólnie rzecz biorąc, dostawcy treści używają SQLite do przechowywania bazowej bazy danych.
Weźmy zawsze pomocny przykład starej, dobrej aplikacji na Facebooka, która pomogła nam uprościć wszystko w poprzednich samouczkach na Androida!
Wszyscy z was w którymś momencie swojego życia w sieci społecznościowej przesłali zdjęcie na swoją oś czasu na Facebooku, prawda! Jak ty to robisz?
Kliknięcie przycisku Zdjęcie na ścianie powoduje przejście do galerii zdjęć. Stamtąd możesz wybrać zdjęcie do przesłania.
Po przeczytaniu poprzednich artykułów Seria samouczków na Androida wiesz o działaniach i intencjach, dlatego wiesz, że dzieje się tak:
Twoja ściana na Facebooku to „AKTYWNOŚĆ”. Kliknięcie przycisku Zdjęcie powoduje przekazanie „ZAMIARU”, który przekazuje wiadomość i otwiera się „DOSTAWCA TREŚCI” (Galeria zdjęć). Zdjęcie zostało przesłane za pomocą sieciowej usługi „SERVICE”.
Obejrzyj to wideo na żywo, aby dowiedzieć się, jak dostawca treści działa w aplikacji Facebook.
Dlaczego system Android potrzebuje dostawców treści?
Potrzeba dostawców treści wynika z tego, że baza danych utworzona w jednej aplikacji nie jest widoczna dla drugiej aplikacji.
Tworzenie i przechowywanie bazy danych w różnych aplikacjach za pomocą SQLite jest proste, jednak problem polega na tym, baza danych w systemie Android jest prywatna dla aplikacji, która ją tworzy . W systemie Android nie ma wspólnego obszaru pamięci, do którego ma dostęp każda aplikacja. Dlatego, aby różne aplikacje mogły korzystać z bazy danych, system Android potrzebuje interfejsu, który umożliwia taką międzyaplikacyjną i międzyprocesową wymianę danych. Tutaj do gry wkracza dostawca treści.
Czy naprawdę potrzebuję dostawcy treści?
1) Ty nie musisz rozwijać własnego dostawcy, jeśli chcesz mieć prywatną bazę danych dla określonej aplikacji (ta baza danych nie byłaby dostępna dla aplikacji innych niż ta, która ją utworzyła).
2) Ty jednak potrzebujesz dostawcy niestandardowego, który zapewni niestandardowe sugestie wyszukiwania we własnym systemie aplikacji.
3) Potrzebujesz również dostawcy treści do kopiowania i wklejania złożonych danych z aplikacji do innych aplikacji.
Jakie operacje obsługuje dostawca treści?
Dostawcy treści obsługują następujące podstawowe operacje:
jeden) Zapytanie: Wysyła zapytanie do dostawcy zawartości dla wszystkich obiektów na podstawie określonego identyfikatora URI.
2) Usunąć: Usuwa określone obiekty z bazy danych dostawcy treści.
3) Aktualizacja: Dokonuje aktualizacji obiektów w bazie danych.
4) Wstawić: Wstawia nowy obiekt do bazy danych.
Kroki do wykonania operacji w dostawcy treści
Krok 1: Dostęp do dostawcy treści
Obiekt klienta ContentResolver służy do uzyskiwania dostępu do danych od dostawcy treści. Komunikuje się z obiektem dostawcy, który z kolei akceptuje żądanie dostępu do danych i zwraca żądane wyniki. Interfejs wymiany danych udostępniany przez dostawcę i obiekt klienta dostawcy umożliwia komunikację między różnymi procesami / aplikacjami.
Aplikacja, która potrzebuje dostępu do bazy danych, musi to zadeklarować i zażądać uprawnień w swoim pliku manifestu. Zostanie to szczegółowo omówione w naszych kolejnych samouczkach dotyczących Androida.
Identyfikator URI treści
Identyfikator URI treści jest jednym z argumentów używanych do identyfikacji danych u dostawcy. Składa się z czterech części:
jeden) Schemat: Schemat dostawcy treści ma stałą wartość: „treść”.
2) Autorytet: Jest to symboliczna nazwa dostawcy i jest unikalna dla każdego z nich. W ten sposób wyodrębniamy żądanego dostawcę treści z tak wielu list.
3) Ścieżka: Ścieżka pomaga odróżnić wymagane dane od całej bazy danych . Na przykład dostawca zawartości rejestru połączeń rozróżnia połączenia nieodebrane, odebrane itp. Przy użyciu różnych ścieżek.
4) ID: Nie jest to składnik obowiązkowy i może nie być obecny w identyfikatorze URI, ale jeśli jest obecny, powinien być numeryczny. Na przykład, Jeśli chcesz uzyskać dostęp do określonego pliku muzycznego od dostawcy treści multimedialnych, podaj również identyfikator .
Proces
Korzystając z uprawnień dostawcy, ContentResolver identyfikuje właściwego dostawcę treści (ponieważ uprawnienia są unikalne dla każdego dostawcy treści). Po wykonaniu tej czynności składnik ścieżki w URI służy do wyboru właściwej (żądanej) tabeli danych. W przypadku obecności identyfikatora dostawca wiedziałby, jakie dokładnie dane są wymagane.
URI są dwojakiego rodzaju:
Ponadto identyfikatory URI mogą również zawierać informacje ograniczające.
Krok 2: Jak pobrać dane od dostawcy treści
Mimo że ContentResolver ma teraz dostęp do tabeli danych, nie może pobrać wymaganych danych, chyba że aplikacja ma „Uprawnienia do odczytu” dla tego konkretnego dostawcy. To uprawnienie jest zdefiniowane w pliku manifestu każdego dostawcy zawartości.
To wszystko aplikacja (który chce uzyskać dostęp do tej bazy danych) wystarczy poprosić o to pozwolenie.
Jak omówiono wcześniej w tym samouczku na Androida, Za pomocą dostawcy treści można wykonać cztery operacje . Omówimy każdy po kolei.
PYTANIA
Teraz masz dostęp do dostawcy i masz uprawnienia do pobierania od niego danych. Następnym krokiem jest skonstruuj zapytanie, aby zażądać wymaganej akcji od dostawcy .
Oto argumenty używane podczas wykonywania zapytań:
jeden) NIENAWIDZIĆ : Działa dokładnie tak, jak wyjaśniono powyżej.
2) Występ: Zapytanie powinno zwraca zestaw kolumn z całej tabeli bazy danych . Nazywa się to projekcją. Przekazanie wartości null zwróci wszystkie kolumny, co jest nieefektywne.
3) Klauzula wyboru: DO filtr deklarujący wiersze do zwrócenia , sformatowany jako klauzula SQL WHERE (z wyłączeniem samej WHERE). Przekazanie wartości null zwróci wszystkie wiersze dla podanego identyfikatora URI.
Na przykład, jeśli wpiszesz alfabet (powiedz „P”) w kolumnie wyszukiwania swojej książki adresowej, zwróci on wszystkie dane kontaktowe zaczynające się od „P”. Jeśli jednak nie wprowadzisz niczego w pasku wyszukiwania, zostanie pobrana pełna lista kontaktów (w takich przypadkach klauzula wyboru jest ustawiona na „null”).
4) Argument wyboru: Możesz dołączyć „? S” do zaznaczenia, które zostaną zastąpione wartościami z selectionArgs, w kolejności, w jakiej pojawiają się w zaznaczeniu.
5) SortOrder: Klauzula SQL ORDER BY (z wyłączeniem samego ORDER BY). Podanie wartości null spowoduje pobranie wyników, które mogą być nieuporządkowane.
PRZYKŁAD KODU do zapytań:
- Wyszukiwanie numerów telefonów w Kontaktach
Kursor kursora = 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 kursorIndex = kursor.getColumnIndex (columnId) String id = kursor.getString (cursorIndex) Nazwa ciągu = kursor.getString (kursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = Integer.parseInt (kursor.getString (kursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID + '? , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', Nr telefonu:' + phoneNo + ''} phoneCursor.close ()}}}
WPROWADZENIE
Załóżmy, że chcesz wstawić nowe kontakty do swojej książki adresowej. ContentValues służy do wykonywania tych wstawek. Aby to osiągnąć, klucze obiektu ContentValue i kolumny dostawcy treści muszą być zgodne. Oto przykład:
PRZYKŁAD KODU DO WSTAWIENIA:
- Operacja polega na wstawieniu nowego wpisu o nazwie „Rajnikant” i numerze „9988999888”
// Operacja ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue. RawContacts._NAME. ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue („Phone.98TYPE”. , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)
AKTUALIZACJA
Aby zaktualizować dostawcę zawartości, używane są następujące argumenty:
jeden) NIENAWIDZIĆ: Identyfikator URI dostawcy treści
2) ContentValues: Zawiera wartości, które zastąpiłyby istniejące dane.
3) Klauzula wyboru: Może to pomóc w wyborze konkretnych rekordów do aktualizacji
4) Argument wyboru: Możesz dołączyć „? S” do zaznaczenia, które zostaną zastąpione wartościami z selectionArgs, w kolejności, w jakiej pojawiają się w zaznaczeniu.
Po raz kolejny klucze obiektu ContentValues muszą być zgodne z kolumnami w dostawcy treści w przeciwnym razie aktualizacja nie nastąpiłaby.
PRZYKŁAD KODU DO AKTUALIZACJI:
- Aktualizuję numer telefonu, który nazywa się „Rajnikant”
Ciąg gdzie = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (gdzie, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, „9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)
USUNIĘCIE
Usunięcie używa tych samych argumentów, co aktualizacja, z wyjątkiem argumentu ContentValues, który nie jest wymagany, ponieważ nie będzie żadnych podstawionych wartości.
PRZYKŁAD KODU DO USUWANIA:
- Usuń kontakt, którego nazwa to „Rajnikant”
Ciąg gdzie = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (gdzie, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)
W przypadku operacji wstawiania identyfikator URI musi być oparty na katalogu. We wszystkich innych przypadkach identyfikatory URI mogą być oparte na identyfikatorze lub katalogu.
Mamy nadzieję Samouczek Androida dla początkujących: część 5 nie było zbyt trudne do zrozumienia! Więcej informacji na temat dostawców treści omówimy w kolejnych samouczkach dotyczących systemu Android. Do tego czasu ucz się podstaw!
połączona lista w programie C.
Czy masz jakieś wątpliwości co do tego samouczka Androida? Zapytaj nas.
Miłej nauki!
Podczas tworzenia tego samouczka systemu Android wykorzystano następujące zasoby! Oficjalni programiści Androida , Edureka.in