Introduzione alla programmazione Android - Android@tulug lezione 4

35
Android @Tulug Lezione 4 By IvanGualandri Twitter: @Italialinux

description

Quarta e ultima lezione del corso android tenuto presso il TuLug (Tuscia Lug) A Viterbo. Le slides sono completamente in italiano (Slides are in italian! Sorry!)

Transcript of Introduzione alla programmazione Android - Android@tulug lezione 4

Page 1: Introduzione alla programmazione Android - Android@tulug lezione 4

Android @TulugLezione 4By IvanGualandri

Twitter: @Italialinux

Page 2: Introduzione alla programmazione Android - Android@tulug lezione 4

Agenda

● Gestione dello storage● SharedPreferences● Assets● SQLite (un occhiata veloce)

Page 3: Introduzione alla programmazione Android - Android@tulug lezione 4

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)

Page 4: Introduzione alla programmazione Android - Android@tulug lezione 4

Introduzione allo storage

Page 5: Introduzione alla programmazione Android - Android@tulug lezione 4

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

Page 6: Introduzione alla programmazione Android - Android@tulug lezione 4

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.

Page 7: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 8: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 9: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 10: Introduzione alla programmazione Android - Android@tulug lezione 4

SharedPreferences...

Page 11: Introduzione alla programmazione Android - Android@tulug lezione 4

● Questa modalitá ci permette di salvare dei tipi di dato primitivo nella modalitá:

chiave - valore● Per dati primitivi intendiamo: interi,

stringhe, booleani, etc.

SharedPreferences

Page 12: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 13: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 14: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 15: Introduzione alla programmazione Android - Android@tulug lezione 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

Page 16: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 17: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 18: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 19: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 20: Introduzione alla programmazione Android - Android@tulug lezione 4

Assets...

Page 21: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 22: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 23: Introduzione alla programmazione Android - Android@tulug lezione 4

● Vanno messi all'interno della cartella assets.

Assets/2

Page 24: Introduzione alla programmazione Android - Android@tulug lezione 4

● La classe che ci permette di gestirli si chiama: AssetManager.

● Anche questa volta ci basta chiederla all'Activity:

AssetManager manager = getAssets();

Assets/3

Page 25: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 26: Introduzione alla programmazione Android - Android@tulug lezione 4

SQLite...

Page 27: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 28: Introduzione alla programmazione Android - Android@tulug lezione 4

● Per utilizzare i servizi del database possiamo estendere la classe:

SQLiteOpenHelper

SQLite/2

Page 29: Introduzione alla programmazione Android - Android@tulug lezione 4

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

Page 30: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 31: Introduzione alla programmazione Android - Android@tulug lezione 4

● Il metodo onUpgrade() - Serve quando dobbiamo effettuare operazioni di aggiornamento del database

● Viene chiamato quando cambia il numero definito in:

DATABASE_VERSION

SQLite/4

Page 32: Introduzione alla programmazione Android - Android@tulug lezione 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

Page 33: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 34: Introduzione alla programmazione Android - Android@tulug lezione 4

● 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

Page 35: Introduzione alla programmazione Android - Android@tulug lezione 4

● Dopo di che ci basta un ciclo while per navigare fra i risultati della query.

SQLite/7