Mechanizm zapisu preferencji

Podobne dokumenty
[Android] Podstawy programowania

Mechanizm powiadomień

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Laboratorium Systemów Mobilnych. Wykład 2

Wykorzystanie plików

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

akademia androida Składowanie danych część VI

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Android pierwsza aplikacja

Podstawowe elementy GUI - zadania

Systemy operacyjne na platformach mobilnych

Laboratorium Systemów Mobilnych. Wykład 1

Tworzenie dialogów i wykorzystanie klasy Toast

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Obsługa SMS i telefonii

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Powiadomienia w systemie Android

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Fragmenty są wspierane od Androida 1.6

Systemy operacyjne na platformach mobilnych

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Podstawowe elementy GUI - zadania

Systemy operacyjne na platformach mobilnych

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Zaawansowane aplikacje WWW - laboratorium

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Programowanie obiektowe

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Wykorzystanie map i geolokalizacji

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

akademia androida Http i AsyncTask część VII

Mobilne aplikacje multimedialne

Systemy operacyjne na platformach mobilnych

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Mariusz Fraś. Instytut Informatyki. olitechnika Wrocławska. Systemy Wbudowane. Android. Dr inż. Mariusz Fraś. maf 1

Android, wprowadzenie do SDK

Tworzenie wydajnych interfejsów. Autorzy: Piotr Michałkiewicz, 2 rok AiR Daniel Maksymow, 2 rok Informatyki

Architektura komunikacji

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University.

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Programowanie w języku Java. Bazy danych SQLite w Javie

Klasy i obiekty cz II

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Laboratorium Programowania Kart Elektronicznych

Wykład 7: Pakiety i Interfejsy

AKADEMIA MŁODYCH ODKRYWCÓW

Java Platform Micro Edition

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Camspot 4.4 Camspot 4.5

Tworzenie i wykorzystanie usług

Aplikacje RMI Lab4

akademia androida Pierwsze kroki w Androidzie część I

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Programowanie telefonów z Windows Phone 7, cz. 4

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Wykorzystanie fragmentów i tabhost

DATA STORAGE. wprowadzenie Michał Mynarski. środa, 26 października 11

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

Programowanie telefonów z Windows Phone 7, cz. 3

Wstęp. Ale po co? Implementacja

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Laboratorium 10 - Web Services

1. CZYM JEST SERIALIZACJA

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Programowanie obiektowe

Zaawansowane aplikacje internetowe laboratorium

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

na podstawie bazy Oracle NoSQL

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

SQLite w systemie Android. Własny dostawca treści. Materiał teoretyczny

JAVA : TELEFONY KOMÓRKOWE I ANDROID 1. WSTĘP

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Metody dostępu do danych

Współbieżność w środowisku Java

- dodaj obiekt tekstowy: /** Maciej */ Stage { title : "First JavaFX App" scene: Scene { width: 300 height: 300 content: [ ] } }

Podstawowe informacje o technologii Java Persistence API - przykład

Wywoływanie metod zdalnych

WSTĘP DO ANDROIDA. Laboratorium

MVC w praktyce tworzymy system artykułów. cz. 1

Java. Programowanie Obiektowe Mateusz Cicheński

Laboratorium - Poznawanie FTP

Transkrypt:

Mechanizm zapisu preferencji

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University. Portions of this page are reproduced from work created and shared by Google and used according to terms

Przechowywanie danych Android oferuje wiele możliwości zapisu danych: Shared Preferences Internal Storage External Storage SQLite Databases Network Connection Content Provider Dobre dla małych źródeł danych typu kluczwartość. Dane są prywatne. Dane o dowolnej strukturze dostępne publicznie. Dane o określonej strukturze (często dostępne publicznie). Dane przechowywane na serwerze. Globalne repozytorium danych dla wszystkich aplikacji 2

Przechowywanie danych Android wykorzystuje następujący schemat udostępniania danych: Wszystkie dane aplikacji zapisywane w katalogu /data/ są prywatne dla określonej aplikacji Uwaga: Pamięć wbudowana jest często mniejsza, ale szybsza niż wykorzystanie karty pamięci (np. typu microsd). http://developer.android.com/guide/topics/data/data-storage.html 3

Przechowywanie danych Przykład przechowywania danych prywatnych http://developer.android.com/guide/topics/data/data-storage.html 4

Przechowywanie danych Przykład przechowywania danych prywatnych Pamięć wewnętrzna http://developer.android.com/guide/topics/data/data-storage.html 5

Przechowywanie danych Dostawcy treści Zapewniają interfejs dostępu do danych, łatwiejszy w użyciu niż zapytania SQL. Użytkownicy wykorzystują metody API do pobierania/modyfikacji danych. Android wykorzystuje ten mechanizm do danych globalnych jak: o obraz, o muzyka, o filmy, o dane kontaktów. 6

KEY VALUE Mechanizm preferencji Jest to lekki mechanizm do przechowywania i pobierania par typu <Kluczwartość> dla danych prostych (alias: mapy, tablice asocjacyjne). Mechanizm preferencji jest zwykle wykorzystywany by przechowywać informacje dotyczące stanu aplikacji bądź te udostępniane wielu aktywnością należącym dodanej aplikacji. Każdy wpis w formie pary <klucz-wartość> jest ciągiem znaków, a wartość musi być instancją typu prostego. Mechanizm preferencji jest podobny do obiektu Bundle, ale dane są na stałe zapisane natomiast w przypadku Bundle tak nie jest. 7

KEY VALUE Podstawowe metody API Aby odwołać się do pliku preferencji można skorzystać z następujących metod: 1. getpreferences() do pobrania określonego pliku preferencji. 2. getsharedpreferences() do pobrania globalnego (na poziomie aplikacji) pliku preferencji. 8

Podstawowe wykorzystanie API Wszystkie metody getxxx zwracają obiekt preferencji, którego zawartość może być zmieniana przez tzw. edytor który posiada metody typu putxxx i getxxx do pobierania i zapisywania danych w tego typu obiekcie. Xxx = { Long, Int, Double, Boolean, String} Obiekt Preferencji Key Value E D Y T O R.getXxx(key n ).getall().getstringset().putxxx(key n, value n ).remove(key n ).clear().commit() 9

Przykład1 1. W tym przykładzie obiekt SharedPreferences jest tworzony pod koniec cyklu życia aktywności. Zawiera on informacje dotyczące wyboru użytkownika w sprawie wyglądu graficznego interfejsu. 2. Po uruchomieniu, znajdowane są zapisane preferencje i na ich podstawie odtwarzany jest stan aplikacji, zgodnie ze zmianami wykonanymi przez użytkownika. Wszelkie informacje tutaj zawarte dotyczą stanu, w którym aplikacja nie posiada jakichkolwiek zapisanych danych. 10

Przykład1 Uwaga Wszelkie informacje tutaj zawarte dotyczą stanu, w którym aplikacja nie posiada jakichkolwiek zapisanych danych. W przeciwnym przypadku należy te dane wyczyścić korzystając z mechanizmu udostępnianego przez system operacyjny Przycisk Menu 11

Przykład1 Uwaga Wszelkie informacje tutaj zawarte dotyczą stanu, w którym aplikacja nie posiada jakichkolwiek zapisanych danych. W przeciwnym przypadku należy te dane wyczyścić korzystając z mechanizmu udostępnianego przez system operacyjny 12

Interfejs bez dokonanego wyboru dotyczącego wygląd Stan aplikacji po dokonaniu wyboru przez użytkownika. Informacje o tym fakcie są zapisywane w pliku mypreferences_001. 13

Struktura i zawartość pliku preferencji. Przegląd zawartości pamięci urządzenia. Zauważ, że zmiany dokonane przez użytkownika zapisane są w lokalizacji data/data/shared_prefs/ w postaci pliku XML. 14

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linlayout1vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linlayout2horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/btnprefsimple" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="pref Simple UI" /> <Button android:id="@+id/btnpreffancy" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="pref Fancy UI" /> </LinearLayout> <TextView android:id="@+id/txtcaption1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ff006666" android:text="this is some sample text " /> </LinearLayout> 15

Example1: Saving/Retrieving a SharedPreference Object holding UI user choices. package cis493.preferences; import... public class PreferenceDemo0 extends Activity implements OnClickListener { Button btnsimplepref; Button btnfancypref; TextView txtcaption1; Boolean fancyprefchosen = false; View mylayout1vertical; final int mode = Activity.MODE_PRIVATE; final String MYPREFS = "MyPreferences_001"; // create a reference to the shared preferences object SharedPreferences mysharedpreferences; // obtain an editor to add data to my SharedPreferences object SharedPreferences.Editor myeditor; File creation modes: MODE_APPEND MODE_ 16

Example1: Saving/Retrieving a SharedPreference Object holding UI user choices. @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); mylayout1vertical = (View)findViewById(R.id.linLayout1Vertical); txtcaption1 = (TextView) findviewbyid(r.id.txtcaption1); txtcaption1.settext("this is a sample line \n + + // create a reference mysharedpreferences = "suggesting the way the UI looks \n" "after you choose your preference"); & editor for the shared preferences getsharedpreferences(myprefs, 0); myeditor = mysharedpreferences.edit(); // has a Preferences file been already created? if (mysharedpreferences!= null && mysharedpreferences.contains("backcolor")) { // object and key found, show all saved values applysavedpreferences(); } else { Toast.makeText(getApplicationContext(), "No Preferences found", 1).show(); } btnsimplepref = (Button) findviewbyid(r.id.btnprefsimple); btnsimplepref.setonclicklistener(this); btnfancypref = (Button) findviewbyid(r.id.btnpreffancy); btnfancypref.setonclicklistener(this); }// oncreate object 171717

Example1: Saving/Retrieving a SharedPreference Object holding UI user choices. @Override public void onclick(view v) { // clear all previous selections myeditor.clear(); } // what button has been clicked? if (v.getid() == btnsimplepref.getid()) { myeditor.putint("backcolor", Color.BLACK);// black background myeditor.putint("textsize", 12); // humble small font } else { // case btnfancypref myeditor.putint("backcolor", Color.BLUE); // fancy blue myeditor.putint("textsize", 20); // fancy big myeditor.putstring("textstyle", "bold"); // fancy bold myeditor.putint("layoutcolor", Color.GREEN);//fancy green } myeditor.commit(); applysavedpreferences(); 18

Example1: Saving/Retrieving a SharedPreference Object holding UI user choices. @Override protected void onpause() { // warning: activity is on its last state of visibility!. // It's on the edge of being killed! Better save all current // state data into Preference object (be quick!) myeditor.putstring("datelastexecution", new Date().toLocaleString()); myeditor.commit(); super.onpause(); } 19

Przykład1: Prosty zapis/odczyt preferencji public void applysavedpreferences() { // extract the <key/value> pairs, use default param for missing data int backcolor = mysharedpreferences.getint("backcolor",color.black); int textsize = mysharedpreferences.getint("textsize", 12); String textstyle = mysharedpreferences.getstring("textstyle", "normal"); int layoutcolor = mysharedpreferences.getint("layoutcolor",color.dkgray); String msg = "color " + backcolor + "\n" + "size " + textsize + "\n" + "style " + textstyle; Toast.makeText(getApplicationContext(), msg, 1).show(); txtcaption1.setbackgroundcolor(backcolor); txtcaption1.settextsize(textsize); if (textstyle.compareto("normal")==0){ txtcaption1.settypeface(typeface.serif,typeface.normal); } else { txtcaption1.settypeface(typeface.serif,typeface.bold); } mylayout1vertical.setbackgroundcolor(layoutcolor); }// applysavedpreferences }//class 20

Przykład2 1. W tym przykładzie obiekt SharedPreferences jest tworzony na końcu cyklu życia aktywności. Zawiera dane takie jak (nazwa, telefon, numer karty kredytowej potencjalnego klienta) 2. Proces jest zamykany poprzez wciśnięcie przycisku Wstecz i ponownie uruchomiony. 3. Tuż przed zabiciem procesu, dane dotyczące stanu aplikacji są zapisywane w obiekcie preferencji. 4. Po ponownym uruchomieniu aplikacji, lokalizowany jest obiekt preferencji i dane są odtwarzane zgodnie z zapisanym stanem. Uwaga Informacje dotyczą startu z czystej konfiguracji bez żadnych zapisanych danych 21

Pierwsze uruchomienie aplikacji Drugie (i każde kolejne) uruchomienie 22

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji Android Device Monitor 23

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji Dane zapisywane są w pamięci urządzenia w formie pliku XML o określonej strukturze 24

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/linlayou1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ff0000ff" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" > <TextView android:id="@+id/captionbox" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="sharedpreferences Container: Customer Data" android:layout_margin="5px" android:textstyle="bold"> </TextView> <EditText android:id="@+id/txtpref" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10px" > </EditText> </LinearLayout> 25

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji package cis493.preferences; import java.util.date; import android.app.activity; import android.content.sharedpreferences; import android.os.bundle; import android.widget.*; public class Preference1 extends Activity { public static final String MYPREFS = "MySharedPreferences001"; //this data values describe a typical customer record String custname = "n.a."; int custage = 0; float custcredit = 0; long custnumber = 0; String custdatelastcall; TextView captionbox; EditText txtpref; final int mode = Activity.MODE_PRIVATE; 26

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); txtpref = (EditText)findViewById(R.id.txtPref); captionbox = (TextView) findviewbyid(r.id.captionbox); captionbox.settext("sharedpreference Container: \n\n"+ "we are working on customer Macarena \n" + "fake an interruption, press 'Back Button' \n" + "re-execute the application."); //create a reference to the shared preferences object int mode = Activity.MODE_PRIVATE; SharedPreferences mysharedpreferences = getsharedpreferences(myprefs, mode); //is there an existing Preferences from previous executions of this app? if (mysharedpreferences!= null && mysharedpreferences.contains("custname")) { //object and key found, show all saved values showsavedpreferences(); } else { txtpref.settext("nada"); } }//oncreate 2727

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji @Override protected void onpause() { //warning: activity is on last state of visibility! We are on the //edge of been killed! Better save current state in Preference object savepreferences(); super.onpause(); } protected void savepreferences(){ //create the shared preferences object SharedPreferences mysharedpreferences = getsharedpreferences(myprefs, mode); //obtain an editor to add data to (my)sharedpreferences object SharedPreferences.Editor myeditor = mysharedpreferences.edit(); //put some <key/value> data in the preferences object myeditor.putstring("custname", "Maria Macarena"); myeditor.putint("custage", 21); myeditor.putfloat("custcredit", 1500000.00F); myeditor.putlong("custnumber", 9876543210L); myeditor.putstring("custdatelastcall", new Date().toLocaleString()); myeditor.commit(); }//savepreferences 2828

Przykład2: Zapisywanie/Odczytywanie obiektu preferencji public void showsavedpreferences() { //retrieve the SharedPreferences object SharedPreferences mysharedpreferences = getsharedpreferences(myprefs, mode); //extract the <key/value> pairs, use default param for missing data custname = mysharedpreferences.getstring("custname", "defnamevalue"); custage = mysharedpreferences.getint("custage", 18); custcredit = mysharedpreferences.getfloat("custcredit", 1000.00F); custnumber = mysharedpreferences.getlong("custnumber", 1L); custdatelastcall = mysharedpreferences.getstring("custdatelastcall", new Date().toLocaleString()); //show saved data on screen String msg = "name: " + custname + "\nage: " + custage + "\ncredit: " + custcredit + "\nlastcall: " + custdatelastcall; txtpref.settext(msg); }//loadpreferences }//Preferences1 2929

Pytania? 30