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

More Related Content

PDF
Introduzione alla programmazione Android - Android@tulug
PDF
Introduzione alla programmazione android - Android@tulug lezione 3
PDF
Introduzione alla programmazione android - Android@tulug lezione 2
PDF
GUI in Gtk+ con Glade & Anjuta
ODP
Design Pattern
PDF
Introduzione a Latex
PDF
C(99) gtk 01 - introduzione e finestre
PPT
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 2
GUI in Gtk+ con Glade & Anjuta
Design Pattern
Introduzione a Latex
C(99) gtk 01 - introduzione e finestre

What's hot (20)

PDF
C(99) gtk 03 - le immagini
PDF
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
PDF
Qt Lezione3: un visualizzatore di immagini
ODT
Chakra 2012.9 rec
PPT
PDF
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
PDF
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
PDF
Closure Visto Da Vicino
PDF
Qt Lezione5: Layout management e Qt Designer
PDF
Java lezione1
PDF
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
PDF
Java OCA teoria 1
PDF
Corso Java 2 - AVANZATO
PDF
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
PDF
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
PDF
Lezione 6a: Design Pattern Strutturali
PDF
Lezione 7: Design Pattern Comportamentali
PDF
Lezione 2: I thread
PDF
Lezione 4: I tool Ant e Subversion
PDF
Corso Java 1 - BASE
C(99) gtk 03 - le immagini
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione3: un visualizzatore di immagini
Chakra 2012.9 rec
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Closure Visto Da Vicino
Qt Lezione5: Layout management e Qt Designer
Java lezione1
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Java OCA teoria 1
Corso Java 2 - AVANZATO
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
Lezione 6a: Design Pattern Strutturali
Lezione 7: Design Pattern Comportamentali
Lezione 2: I thread
Lezione 4: I tool Ant e Subversion
Corso Java 1 - BASE
Ad

Similar to Introduzione alla programmazione Android - Android@tulug lezione 4 (20)

PDF
MS_corso base iOS iPhone_partII
PPTX
Persistenza su Xamarin
KEY
Corso Iphone in 48h (parte 2)
PDF
Understanding Operating Systems 5th Edition McHoes Solutions Manual
PPTX
SQLite in Xamarin.Forms
PPTX
Gestione file su android
PDF
Create R package with RStudio
PPS
Presentazione Tesi Marco Ventura
PDF
Giovambattista Fazioli, 10 more things
PDF
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
PDF
Drupal 8 - dal download del core alla pubblicazione in produzione
PDF
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
PPT
eZ publish - Extension
ODP
Presentazione java7
PDF
Drupal - per chi vuole iniziare
PDF
Creare un tema personalizzato per wordpress
PPTX
Il recupero delle informazioni cancellate e nascoste
PPT
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
PDF
Programming iOS lezione 3
PDF
Moodle 2.7 - corsi - importazione scorm
MS_corso base iOS iPhone_partII
Persistenza su Xamarin
Corso Iphone in 48h (parte 2)
Understanding Operating Systems 5th Edition McHoes Solutions Manual
SQLite in Xamarin.Forms
Gestione file su android
Create R package with RStudio
Presentazione Tesi Marco Ventura
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
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
eZ publish - Extension
Presentazione java7
Drupal - per chi vuole iniziare
Creare un tema personalizzato per wordpress
Il recupero delle informazioni cancellate e nascoste
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Programming iOS lezione 3
Moodle 2.7 - corsi - importazione scorm
Ad

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