SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Android @Tulug
Lezione 4
By IvanGualandri
Twitter: @Italialinux
Agenda
● Gestione dello storage
● SharedPreferences
● Assets
● SQLite (un occhiata veloce)
Riassunto
● Nelle ultime lezioni abbiamo visto,
come aggiungere componenti grafici
ad un applicazione, come farli
interagire mediante bottoni, come
utilizzare alcune funzioni specifiche
del telefonino (invio/ricezione sms)
Introduzione allo storage
Introduzione allo Storage
● Android mette a disposizione diverse
possibilitá per salvare informazioni
persistenti sul telefonino. Le principali
sono:
○ SharedPreferences
○ Assets
○ Memoria interna (dentro res)
○ SQLite
Introduzione allo Storage/1
● SharedPreferences: non serve per
salvare files, ma per salvare
informazioni di configurazione
dell'applicazione. O comunque dei
dati sotto forma primitiva (numeri,
stringhe, etc).
● Esempio? Se l'applicazione è la
prima volta che si avvia.
● Assets: Viene usato quando
vogliamo salvare i files da utilizzare
in maniera "grezza" dall'applicazione.
● Quali per esempio: files di testo,
caratteri, brani musicali, etc.
● Se li mettessimo in /res android li
proesserebbe mediante il suo
resource system.
Introduzione allo Storage/2
● SQLite: Un vero e proprio database
relazionale, quindi cosa dire di più?
Si usa quando le informazioni si
possono rappresentare mediante
tabelle, e si vogliono fornire funzioni
veloci di interrogazione, ordinamento,
etc.
Introduzione allo Storage/3
● Memoria interna: In questo caso si
sfrutta la cartella resources, e quindi
il dato risiede nella cosiddetta
memoria interna. Rende l'accesso
dei dati da parte dell'applicazione più
semplice. Il problema è che molti
telefonini hanno la memoria interna
molto limitata.
Introduzione allo Storage/4
SharedPreferences...
● Questa modalitá ci permette di
salvare dei tipi di dato primitivo nella
modalitá:
chiave - valore
● Per dati primitivi intendiamo: interi,
stringhe, booleani, etc.
SharedPreferences
● Esistono due tipi:
○ SharedPreferences: Sono
informazioni disponibili per tutte le
componenti dell'applicazione
○ Preferences: Sono invece disponibili
solamente dalla singola activity
Noi vedremo solo le shared.
SharedPreferences/2
● Ovviamente le due operazioni che
possiamo fare sono leggere o
scrivere valori.
● Per la prima basta solo l'accesso
all'oggetto SharedPreferences,
● Per la seconda invece dobbiamo
utilizzare: SharedPreferences.Editor
SharedPreferences/3
● Della creazione/accesso all'oggetto se ne
occupa l'applicazione/sistema. quello che
dobbiamo fare noi è fornirgli il nome che
le identificherá. e la modalitá di accesso.
● MODE_PRIVATE è quella standard.
SharedPreferences preferences = this.
getSharedPreferences("org.italialinux.
profilemanager", Context.MODE_PRIVATE);
SharedPreferences/4
● Con preferences a questo punto gia
possiamo leggere i dati contenuti al suo
interno. I metodi da usare sono:
public boolean getBoolean (String key, boolean
defValue);
public float getFloat (String key, float defValue);
public int getInt (String key, int defValue);
public long getLong (String key, long defValue);
public String getString (String key, String
defValue);
SharedPreferences/5
● Tutti i metodi hanno una logica simile,
prendono due argomenti:
○ key - La chiave con il quale
abbiamo salvato il valore
○ defValue - Il valore da tornare nel
caso non si fosse trovata la
proprietá key.
SharedPreferences/5
● Se invece vogliamo modificarne il
contenuto, ci serve l'oggetto:
○ SharedPreferences.Editor
● Ci basta chiamare il metodo edit di
SharedPreferences:
SharedPreferences.Editor editor =
preferences.edit();
SharedPreferences/6
● Come prima, per inserire dei dati abbiamo
a disposizione i seguenti metodi:
public SharedPreferences.Editor putBoolean (String key,
boolean value)
public SharedPreferences.Editor putString (String key,
String value)
public SharedPreferences.Editor putLong (String key,
long value)
Per salvare basta chiamare:
SharedPreferences/7
● Esercizio:
○ Fare una app android che
identifica se è la prima volta che
viene lanciata.
● Suggerimenti:
○ Ci basta un booleano
○ Per salvare dobbiamo usare
l'editor
SharedPreferences/9
Assets...
● Con gli asset salviamo i dati su
memoria esterna
● Si utilizzano quando la nostra
applicazione deve salvare file che
non devono essere cancellati se
l'applicazione viene rimossa (foto
scattate, video registrati,etc. )
Assets
● Con gli asset salviamo i dati in
maniera grezza.
● Si utilizzano quando vogliamo
utilizzare, che non devono essere
preprocessati dal resource manager,
e devono essere letti così come
sono.
Assets
● Vanno messi all'interno della cartella
assets.
Assets/2
● La classe che ci permette di gestirli si
chiama: AssetManager.
● Anche questa volta ci basta chiederla
all'Activity:
AssetManager manager = getAssets();
Assets/3
● Per aprire un file possiamo usare il
metodo open("filename"), che ci
torna un InputStream (da gestire com
cone qualsiasi programma java
InputStream ims = assetManager.open("image.
jpg");
● Con list("foldername") otteniamo la
lista dei files contenuti in una cartella
String[] files = assetManager.list("Files");
Assets/4
SQLite...
● Si tratta di un database relazionale
che non necessita di un server
● Tutto risiede all'interno di un file
● L'interrogazione avviene mediante
query sql.
SQLite
● Per utilizzare i servizi del database
possiamo estendere la classe:
SQLiteOpenHelper
SQLite/2
public class DatabaseManager extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "expenses.db" ;
private static final int DATABASE_VERSION = 1;
** Create a helper object for the Events database */
public DatabaseManager (Context ctx) {
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE expense (" +
" _id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "dateOfExpense INTEGER, amount REAL, description TEXT NOT NULL);" );
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) {
db.execSQL("DROP TABLE IF EXISTS expense");
onCreate(db);
}
}
SQLite/3
● Il metodo onCreate() - Non è quello
dell'activity.
● Serve per le operazioni preliminari di
creazione del database.
● Questa viene chiamata quando il
database non esiste, in occasione
della prima operazione di scrittura.
SQLite/3
● Il metodo onUpgrade() - Serve
quando dobbiamo effettuare
operazioni di aggiornamento del
database
● Viene chiamato quando cambia il
numero definito in:
DATABASE_VERSION
SQLite/4
public Expense[] findAllExpenses() {
SQLiteDatabase db = getReadableDatabase();
String sql = “SELECT date_of_expense,amount,description FROM
expenses ORDER BY date_of_expense”;
Cursor c = db.rawQuery(sql,null);
Expense [] result=new Expense [c.getCount()];
c.moveToFirst();
while (!c.isAfterLast()) {
Expense expense = new Expense(c.getLong(0),c.getDouble(1),
c.getString(2));
result[c.getPosition()]=expense;
c.moveToNext();
}
c.close();
}
SQLite/5
● Per accedere al database abbiamo
due metodi:
○ getReadableDatabase(); Ci da accesso
in sola lettura
○ getWritableDatabase(); Ci da accesso
anche in scrittura
● L'oggetto tornato è un
SQLiteDatabase che contiene i
metodi per le query.
SQLite/6
● Le query possiamo eseguirle con il
metodo
Cursor c = rawQuery(query, null);
● Ora i risultati sono contenuti
all'interno dell'oggetto cursor.
● É importante la chiamata
c.moveToFirst();
Altrimenti riceverremo una
NullPointerException
SQLite/7
● Dopo di che ci basta un ciclo while
per navigare fra i risultati della query.
SQLite/7

Contenu connexe

Tendances

C(99) gtk 03 - le immagini
C(99) gtk   03 - le immaginiC(99) gtk   03 - le immagini
C(99) gtk 03 - le immaginiMaurizio Carboni
 
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtQt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtPaolo Sereno
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 reckdekda
 
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegateSviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegatePaolo Sereno
 
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiQt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Qt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt DesignerQt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt DesignerPaolo Sereno
 
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerQt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerPaolo Sereno
 
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passiQt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passiPaolo Sereno
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 

Tendances (20)

C(99) gtk 03 - le immagini
C(99) gtk   03 - le immaginiC(99) gtk   03 - le immagini
C(99) gtk 03 - le immagini
 
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtQt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 rec
 
Lezione Android prima parte
Lezione Android prima parteLezione Android prima parte
Lezione Android prima parte
 
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegateSviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
 
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiQt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Qt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt DesignerQt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt Designer
 
Java lezione1
Java lezione1Java lezione1
Java lezione1
 
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerQt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passiQt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 

Similaire à Introduzione alla programmazione Android - Android@tulug lezione 4

MS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMobileSchool
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)FLT.lab
 
SQLite in Xamarin.Forms
SQLite in Xamarin.FormsSQLite in Xamarin.Forms
SQLite in Xamarin.FormsGuido Magrin
 
Gestione file su android
Gestione file su androidGestione file su android
Gestione file su androidasterixms
 
Create R package with RStudio
Create R package with RStudioCreate R package with RStudio
Create R package with RStudioNicola Procopio
 
Presentazione Tesi Marco Ventura
Presentazione Tesi Marco VenturaPresentazione Tesi Marco Ventura
Presentazione Tesi Marco Venturaguest335584
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsKnowCamp
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...DrupalDay
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzionesparkfabrik
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Marco Chiesi
 
Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziareSalvatore Paone
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressGGDBologna
 
Il recupero delle informazioni cancellate e nascoste
Il recupero delle informazioni cancellate e nascosteIl recupero delle informazioni cancellate e nascoste
Il recupero delle informazioni cancellate e nascosteEdoardo E. Artese
 
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012Walter Volpi
 
Moodle 2.7 - corsi - importazione scorm
Moodle 2.7 - corsi - importazione scormMoodle 2.7 - corsi - importazione scorm
Moodle 2.7 - corsi - importazione scormLaura Camellini
 

Similaire à Introduzione alla programmazione Android - Android@tulug lezione 4 (20)

MS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partII
 
Persistenza su Xamarin
Persistenza su XamarinPersistenza su Xamarin
Persistenza su Xamarin
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)
 
SQLite in Xamarin.Forms
SQLite in Xamarin.FormsSQLite in Xamarin.Forms
SQLite in Xamarin.Forms
 
Gestione file su android
Gestione file su androidGestione file su android
Gestione file su android
 
Create R package with RStudio
Create R package with RStudioCreate R package with RStudio
Create R package with RStudio
 
Presentazione Tesi Marco Ventura
Presentazione Tesi Marco VenturaPresentazione Tesi Marco Ventura
Presentazione Tesi Marco Ventura
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more things
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzione
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
eZ publish - Extension
eZ publish - ExtensioneZ publish - Extension
eZ publish - Extension
 
Presentazione java7
Presentazione java7Presentazione java7
Presentazione java7
 
Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziare
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpress
 
Il recupero delle informazioni cancellate e nascoste
Il recupero delle informazioni cancellate e nascosteIl recupero delle informazioni cancellate e nascoste
Il recupero delle informazioni cancellate e nascoste
 
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
 
Programming iOS lezione 3
Programming iOS lezione 3Programming iOS lezione 3
Programming iOS lezione 3
 
Moodle 2.7 - corsi - importazione scorm
Moodle 2.7 - corsi - importazione scormMoodle 2.7 - corsi - importazione scorm
Moodle 2.7 - corsi - importazione scorm
 
Drupal 7
Drupal 7Drupal 7
Drupal 7
 

Introduzione alla programmazione Android - Android@tulug lezione 4

  • 1. Android @Tulug Lezione 4 By IvanGualandri Twitter: @Italialinux
  • 2. Agenda ● Gestione dello storage ● SharedPreferences ● Assets ● SQLite (un occhiata veloce)
  • 3. Riassunto ● Nelle ultime lezioni abbiamo visto, come aggiungere componenti grafici ad un applicazione, come farli interagire mediante bottoni, come utilizzare alcune funzioni specifiche del telefonino (invio/ricezione sms)
  • 5. Introduzione allo Storage ● Android mette a disposizione diverse possibilitá per salvare informazioni persistenti sul telefonino. Le principali sono: ○ SharedPreferences ○ Assets ○ Memoria interna (dentro res) ○ SQLite
  • 6. Introduzione allo Storage/1 ● SharedPreferences: non serve per salvare files, ma per salvare informazioni di configurazione dell'applicazione. O comunque dei dati sotto forma primitiva (numeri, stringhe, etc). ● Esempio? Se l'applicazione è la prima volta che si avvia.
  • 7. ● Assets: Viene usato quando vogliamo salvare i files da utilizzare in maniera "grezza" dall'applicazione. ● Quali per esempio: files di testo, caratteri, brani musicali, etc. ● Se li mettessimo in /res android li proesserebbe mediante il suo resource system. Introduzione allo Storage/2
  • 8. ● SQLite: Un vero e proprio database relazionale, quindi cosa dire di più? Si usa quando le informazioni si possono rappresentare mediante tabelle, e si vogliono fornire funzioni veloci di interrogazione, ordinamento, etc. Introduzione allo Storage/3
  • 9. ● Memoria interna: In questo caso si sfrutta la cartella resources, e quindi il dato risiede nella cosiddetta memoria interna. Rende l'accesso dei dati da parte dell'applicazione più semplice. Il problema è che molti telefonini hanno la memoria interna molto limitata. Introduzione allo Storage/4
  • 11. ● Questa modalitá ci permette di salvare dei tipi di dato primitivo nella modalitá: chiave - valore ● Per dati primitivi intendiamo: interi, stringhe, booleani, etc. SharedPreferences
  • 12. ● Esistono due tipi: ○ SharedPreferences: Sono informazioni disponibili per tutte le componenti dell'applicazione ○ Preferences: Sono invece disponibili solamente dalla singola activity Noi vedremo solo le shared. SharedPreferences/2
  • 13. ● Ovviamente le due operazioni che possiamo fare sono leggere o scrivere valori. ● Per la prima basta solo l'accesso all'oggetto SharedPreferences, ● Per la seconda invece dobbiamo utilizzare: SharedPreferences.Editor SharedPreferences/3
  • 14. ● Della creazione/accesso all'oggetto se ne occupa l'applicazione/sistema. quello che dobbiamo fare noi è fornirgli il nome che le identificherá. e la modalitá di accesso. ● MODE_PRIVATE è quella standard. SharedPreferences preferences = this. getSharedPreferences("org.italialinux. profilemanager", Context.MODE_PRIVATE); SharedPreferences/4
  • 15. ● Con preferences a questo punto gia possiamo leggere i dati contenuti al suo interno. I metodi da usare sono: public boolean getBoolean (String key, boolean defValue); public float getFloat (String key, float defValue); public int getInt (String key, int defValue); public long getLong (String key, long defValue); public String getString (String key, String defValue); SharedPreferences/5
  • 16. ● Tutti i metodi hanno una logica simile, prendono due argomenti: ○ key - La chiave con il quale abbiamo salvato il valore ○ defValue - Il valore da tornare nel caso non si fosse trovata la proprietá key. SharedPreferences/5
  • 17. ● Se invece vogliamo modificarne il contenuto, ci serve l'oggetto: ○ SharedPreferences.Editor ● Ci basta chiamare il metodo edit di SharedPreferences: SharedPreferences.Editor editor = preferences.edit(); SharedPreferences/6
  • 18. ● Come prima, per inserire dei dati abbiamo a disposizione i seguenti metodi: public SharedPreferences.Editor putBoolean (String key, boolean value) public SharedPreferences.Editor putString (String key, String value) public SharedPreferences.Editor putLong (String key, long value) Per salvare basta chiamare: SharedPreferences/7
  • 19. ● Esercizio: ○ Fare una app android che identifica se è la prima volta che viene lanciata. ● Suggerimenti: ○ Ci basta un booleano ○ Per salvare dobbiamo usare l'editor SharedPreferences/9
  • 21. ● Con gli asset salviamo i dati su memoria esterna ● Si utilizzano quando la nostra applicazione deve salvare file che non devono essere cancellati se l'applicazione viene rimossa (foto scattate, video registrati,etc. ) Assets
  • 22. ● Con gli asset salviamo i dati in maniera grezza. ● Si utilizzano quando vogliamo utilizzare, che non devono essere preprocessati dal resource manager, e devono essere letti così come sono. Assets
  • 23. ● Vanno messi all'interno della cartella assets. Assets/2
  • 24. ● La classe che ci permette di gestirli si chiama: AssetManager. ● Anche questa volta ci basta chiederla all'Activity: AssetManager manager = getAssets(); Assets/3
  • 25. ● Per aprire un file possiamo usare il metodo open("filename"), che ci torna un InputStream (da gestire com cone qualsiasi programma java InputStream ims = assetManager.open("image. jpg"); ● Con list("foldername") otteniamo la lista dei files contenuti in una cartella String[] files = assetManager.list("Files"); Assets/4
  • 27. ● Si tratta di un database relazionale che non necessita di un server ● Tutto risiede all'interno di un file ● L'interrogazione avviene mediante query sql. SQLite
  • 28. ● Per utilizzare i servizi del database possiamo estendere la classe: SQLiteOpenHelper SQLite/2
  • 29. public class DatabaseManager extends SQLiteOpenHelper { private static final String DATABASE_NAME = "expenses.db" ; private static final int DATABASE_VERSION = 1; ** Create a helper object for the Events database */ public DatabaseManager (Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE expense (" + " _id INTEGER PRIMARY KEY AUTOINCREMENT, " + "dateOfExpense INTEGER, amount REAL, description TEXT NOT NULL);" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS expense"); onCreate(db); } } SQLite/3
  • 30. ● Il metodo onCreate() - Non è quello dell'activity. ● Serve per le operazioni preliminari di creazione del database. ● Questa viene chiamata quando il database non esiste, in occasione della prima operazione di scrittura. SQLite/3
  • 31. ● Il metodo onUpgrade() - Serve quando dobbiamo effettuare operazioni di aggiornamento del database ● Viene chiamato quando cambia il numero definito in: DATABASE_VERSION SQLite/4
  • 32. public Expense[] findAllExpenses() { SQLiteDatabase db = getReadableDatabase(); String sql = “SELECT date_of_expense,amount,description FROM expenses ORDER BY date_of_expense”; Cursor c = db.rawQuery(sql,null); Expense [] result=new Expense [c.getCount()]; c.moveToFirst(); while (!c.isAfterLast()) { Expense expense = new Expense(c.getLong(0),c.getDouble(1), c.getString(2)); result[c.getPosition()]=expense; c.moveToNext(); } c.close(); } SQLite/5
  • 33. ● Per accedere al database abbiamo due metodi: ○ getReadableDatabase(); Ci da accesso in sola lettura ○ getWritableDatabase(); Ci da accesso anche in scrittura ● L'oggetto tornato è un SQLiteDatabase che contiene i metodi per le query. SQLite/6
  • 34. ● Le query possiamo eseguirle con il metodo Cursor c = rawQuery(query, null); ● Ora i risultati sono contenuti all'interno dell'oggetto cursor. ● É importante la chiamata c.moveToFirst(); Altrimenti riceverremo una NullPointerException SQLite/7
  • 35. ● Dopo di che ci basta un ciclo while per navigare fra i risultati della query. SQLite/7