[curs android] c09 - stocarea datelor (ipw 2011)
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=39TRANSCRIPT
![Page 1: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/1.jpg)
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
![Page 2: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/2.jpg)
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
![Page 3: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/3.jpg)
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 = “”;
![Page 4: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/4.jpg)
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
![Page 5: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/5.jpg)
5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Preferinte (Setari)
![Page 6: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/6.jpg)
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.
![Page 7: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/7.jpg)
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();
![Page 8: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/8.jpg)
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.
![Page 9: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/9.jpg)
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);
![Page 10: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/10.jpg)
10 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
PreferenceActivity
Context.MODE_PRIVATE
![Page 11: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/11.jpg)
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
![Page 12: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/12.jpg)
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
![Page 13: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/13.jpg)
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.
![Page 14: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/14.jpg)
14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Exemplu cu PreferenceActivity• Definim un fisierul XML• Scriem PreferenceActivity• Definim PreferenceActivity in Manifest
![Page 15: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/15.jpg)
15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Fisierul XML
Salvat in res/xml/settings.xml
![Page 16: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/16.jpg)
16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Siruri cu valori
Salvat in res/values/arrays.xml
![Page 17: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/17.jpg)
17 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
PreferenceActivity
![Page 18: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/18.jpg)
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"));
![Page 19: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/19.jpg)
19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stocarea interna
![Page 20: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/20.jpg)
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.
![Page 21: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/21.jpg)
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.
![Page 22: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/22.jpg)
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.
![Page 23: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/23.jpg)
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).
![Page 24: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/24.jpg)
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.
![Page 25: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/25.jpg)
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.
![Page 26: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/26.jpg)
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.
![Page 27: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/27.jpg)
27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Stocare externa
![Page 28: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/28.jpg)
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.
![Page 29: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/29.jpg)
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
![Page 30: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/30.jpg)
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;}
![Page 31: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/31.jpg)
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/
![Page 32: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/32.jpg)
32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date private
![Page 33: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/33.jpg)
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)!
![Page 34: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/34.jpg)
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– …
![Page 35: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/35.jpg)
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.
![Page 36: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/36.jpg)
36 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Date partajate
![Page 37: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/37.jpg)
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.
![Page 38: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/38.jpg)
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/
![Page 39: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/39.jpg)
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– …
![Page 40: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/40.jpg)
40 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Cache extern
![Page 41: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/41.jpg)
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)!
![Page 42: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/42.jpg)
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).
![Page 43: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/43.jpg)
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
![Page 44: [Curs Android] C09 - Stocarea Datelor (IPW 2011)](https://reader036.vdocuments.site/reader036/viewer/2022081414/54c7b8d04a795967638b4638/html5/thumbnails/44.jpg)
44 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
Întrebări?