Quarta e ultima lezione del corso android tenuto presso il TuLug (Tuscia Lug) A Viterbo. Le slides sono completamente in italiano (際際滷s are in italian! Sorry!)
1 of 35
Downloaded 54 times
More Related Content
Introduzione alla programmazione Android - Android@tulug lezione 4
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