Upload
vlad-petre
View
1.125
Download
0
Embed Size (px)
DESCRIPTION
These slides are part of the Android Development Course which I taught to 10 students, while participating in the IP Workshop Summer School 2011. http://www.scoaladevara.info/2011/?page_id=39
Citation preview
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
AndroidStocarea Datelor
Vlad PETRE
http://twitter.com/vladpetre88
http://facebook.com/vladpetre88
http://www.linkedin.com/in/vladpetre88
2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date Predefinite• ReadOnly• Assets
– directorul assets– reprezinta un depozit nestructurat de fisiere
• Resurse– directorul res/raw– devin R.raw.nume_resursa
3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Assets• Ca sa deschidem un asset:
AssetManager am = context.getResources().getAssets();InputStream is = am.open (String assetName);
• Ca sa obtin lista de asseturi:String[] assetsList = am.list (String path);
• path – este relativ la directorul assets• Ex: pentru a cauta direct in directorul assets, atunci path = “”;
4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Resurse• InputStream is = context.getResources().open(int id);
• id este un int de forma– R.raw.nume_resursa
5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Preferinte (Setari)
6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Preferinte (Setari)• Mecanism prin care putem retine anumite date de
configurare (ex: numele utilizatorului, ringtone-ul, etc).• Putem stoca cinci tipuri de date:
– String– float– boolean– int– long
• Datele persista atata timp cat aplicatia e instalata in telefon.
7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Scrierea unor preferinte (1)String KEY = “myPrefs”;int mode = Context.MODE_PRIVATE;
SharedPreferences myPrefs = context.getSharedPreferences(KEY, mode);
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString(“name”, “Alex Marcu");prefsEditor.putInt(“age”, 23);
prefsEditor.commit();
8 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Scrierea unor preferinte (2)• Moduri:
– Context. MODE_PRIVATE• Default. Fisierul poate fi accesat doar de catre aplicatia care l-a
creat.
– Context.MODE_APPEND• Scrierea are loc la sfarsitul fisierului. Fisierul poate fi accesat
doar de catre aplicatia care l-a creat.
– Context.MODE_WORLD_READABLE• Permitem tuturor aplicatiilor sa citeasca fisierul respectiv.
– Context.MODE_WORLD_WRITEABLE• Permitem tuturor aplicatiilor sa scrie fisierul respectiv.
9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Citirea unor preferinteString key = “myPrefs“;int mode = Context.MODE_PRIVATE;
SharedPreferences myPrefs = context.getSharedPreferences (key, mode);
String name = myPrefs.getString(“name”, "nothing");int age = myPrefs.getInt(“age”, -1);
10 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
PreferenceActivity
Context.MODE_PRIVATE
11 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
PreferenceActivity• Activitate specializata pentru setari.• Din punct de vedere vizual, este construita automat.• Preferintele trebuiesc definite intr-un fisier *.xml
plasat in directorul res/xml.• addPreferencesFromResource(R.xml.xml_setari);• Tipuri de preferinte:
– String– boolean
12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Fisierul xml (1)• Contine elemente de tipul Preference
– ListPreference, CheckBoxPreference, EditTextPreference, etc
• Atribute posibile:– key – cheie unica de identificare– title – un titlu informativ pentru user– summary – un sumar informativ pentru user– defaultValue – valoarea initiala– dependency – determina disponibilitatea setarii in functie
de o alta
13 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Fisierul xml (2)• Tipuri de setari:
– ListPreference– CheckBoxPreference– EditTextPreference– RingtonePreference
• Grupate in diferite categorii– PreferenceCategory
• key• title
Nodul radacina din cadrul fisierului xml se numeste PreferenceScreen.
14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Exemplu cu PreferenceActivity• Definim un fisierul XML• Scriem PreferenceActivity• Definim PreferenceActivity in Manifest
15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Fisierul XML
Salvat in res/xml/settings.xml
16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Siruri cu valori
Salvat in res/values/arrays.xml
17 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
PreferenceActivity
18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Citirea setarilorSharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("name", "(no name)");boolean isStudent = preferences.getBoolean("student", false);int year = Integer.parseInt(preferences.getString("year", "1"));
19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stocarea interna
20 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stocare Interna• Sub forma de fisiere aflate intr-un director special in
cadrul aplicatiei.• In general, stocarea de fisiere are loc in memoria
interna nevolatila, nu pe cardul SD.
21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Scrierea unui fisier internString FILENAME = "hello_file";String string = "hello world!";
FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());fos.close();
• FILENAME nu are voie sa contina o cale, ci se precizeaza direct numele fisierului.
22 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Citirea unui fisier intern
String FILENAME = "hello_file";FileInputStream fis = context.openFileInput(FILENAME);
• FileInputStream se foloseste exact ca in Java SE.• FILENAME nu are voie sa contina o cale, ci se
precizeaza direct numele fisierului.
23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Listarea fisierelor interne
String[] fileList = context.fileList();
• Intoarce o lista cu numele fisierelor interne (fara cale).
24 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stergerea fisierelor interne
String FILENAME = "hello_file";boolean successfullyDeleted =
context.deleteFile(FILENAME)
• FILENAME nu are voie sa contina o cale, ci se precizeaza direct numele fisierului.
25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Directoare interne
File dir = context.getDir(String dirName, int mode);
• Metoda imi intoarce directorul respectiv. Daca acesta nu exista, il creaza.
• Se foloseste exact ca in Java SE.
26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Cache Intern
File cacheDir = context.getCacheDir();
• Un director special.• Se sterge automat atunci cand sistemul decide ca
are prea putina memorie interna.
27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stocare externa
28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stocare externa• Are loc pe cardul SD, unde pot scrie toate aplicatiile
oriunde.• Trebuie sa avem grija, deoarece cardul SD nu este
permanent prezent (avem mai multe stari).
• Odata cu API 8 au fost introduse cateva directoare speciale pe cardul SD.
29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Starile cardului SD• String Environment.getExternalStorageState();
– MEDIA_MOUNTED– MEDIA_MOUNTED_READ_ONLY– MEDIA_CHECKING– MEDIA_REMOVED– MEDIA_SHARED– MEDIA_UNMOUNTABLE– MEDIA_UNMOUNTED– MEDIA_BAD_REMOVAL– MEDIA_NOFS
30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Exemplu verificare stare card SDboolean mExternalStorageAvailable = false;boolean mExternalStorageWriteable = false;String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media mExternalStorageAvailable = mExternalStorageWriteable = true;} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // We can only read the media mExternalStorageAvailable = true; mExternalStorageWriteable = false;} else { // Something else is wrong. It may be one of many other states, but all we need // to know is we can neither read nor write mExternalStorageAvailable = mExternalStorageWriteable = false;}
31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Cum stocam datele pe cardul SD
API <= 7 API >= 8Date private Date privateDate partajate Date partajateCache extern Cache extern
• In general, calea catre cardul SD este de forma:o /sdcard/
32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date private
33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date private conform API <= 7• Preluam calea catre cardul SD:
– File externalDir = Environment.getExternalStorageDirectory();
• Iar apoi scriem fisierele in directorul de pe card:– /Android/data/<package_name>/files/
• Ceea ce stocam conform acestei metode este sters la dezinstalare, doar daca aplicatia a fost instalata pe Android 2.2 (API >= 8)!
34 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date private conform API >= 8 (1)• Calea catre cardul SD o preluam:
– File externalDir = Environment.getExternalFilesDir (String type);
• Cu parametrul type putem preciza un subdirector:– DIRECTORY_MUSIC– DIRECTORY_PODCASTS– DIRECTORY_RINGTONES– DIRECTORY_ALARMS– …
35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date private conform API >= 8 (2)• Daca type este null, atunci primesc directorul
radacina al locatiei unde este recomandat ca eu sa salvez fisiere pe cardul SD.
• Ceea ce stocam conform acestei metode este sters la dezinstalare.
• Subdirectoarele ajuta Scannerul Media al Android-ului. Spre exemplu, sunetele stocate in DIRECTORY_RINGTONES nu vor aparea in player-ul de muzica.
36 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date partajate
37 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date partajate conform API <= 7 (1)
File externalDir = Environment. getExternalStorageDirectory ();
• Intoarce directorul radacina al cardului SD.
38 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date partajate conform API <= 7 (2)• Se recomanda sa salvam fisierele corespunzator
urmatoarelor subdirectoare:– Music/– Podcasts/– Ringtones/– Alarms/– Notifications/– Pictures/– Movies/– Download/
39 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date partajate conform API >= 8File externalDir = Environment.getExternalStoragePublicDirectory
(String type);• Intoarce directorul radacina extern unde atat noi, cat si alte
aplicatii, putem stoca fisiere.• Cu parametrul type putem preciza un subdirector:– DIRECTORY_MUSIC– DIRECTORY_PODCASTS– DIRECTORY_RINGTONES– DIRECTORY_ALARMS– …
40 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Cache extern
41 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Cache extern conform API <= 7
File externalDir = Environment. getExternalStorageDirectory ();
• Intoarce directorul radacina al cardului SD.• Iar apoi scriem fisierele in directorul de pe card:
– /Android/data/<package_name>/cache/• Sistemul NU va sterge aceste fisiere daca ramane fara spatiu pe cardul
SD (deci le gestionam singuri).• Ceea ce stocam conform acestei metode este sters la dezinstalare, doar
daca aplicatia a fost instalata pe Android 2.2 (API >= 8)!
42 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Cache extern conform API >= 8
File externalCacheDir = Environment.getExternalCacheDir();
• Fisierele sunt sterse automat daca userul dezinstaleaza aplicatia.
• Sistemul NU va sterge aceste fisiere daca ramane fara spatiu pe cardul SD (deci le gestionam singuri).
43 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Referinte• http://pdm.ipworkshop.ro• http://developer.android.com/reference/android/co
ntent/res/AssetManager.html• http://www.kaloer.com/android-preferences• http://developer.android.com/guide/topics/data/da
ta-storage.html
44 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Întrebări?