Introduzione alla programmazione Android - Android@tulug lezione 4
-
Upload
ivan-gualandri -
Category
Documents
-
view
481 -
download
1
description
Transcript of Introduzione alla programmazione Android - Android@tulug lezione 4
Android @TulugLezione 4By 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:public boolean commit();
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);}@Overridepublic void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE expense (" + " _id INTEGER PRIMARY KEY AUTOINCREMENT, " + "dateOfExpense INTEGER, amount REAL, description TEXT NOT NULL);" );
}@Overridepublic 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