Affrontando lo sviluppo delle vostre prime applicazioni vi accorgerete sicuramente che uno dei concetti fondamentali che bisogna possedere è il come e dove salvare i dati utili alla nostra applicazione. L’sdk di Android ci fornisce diversi strumenti come le shared preferences, i content values o il database classico.
Vediamo come primo strumento come creare e gestire un database SQLite.
Potremo usare questa classe nella nostra activity.
[java]
public class MyDatabase {
SQLiteDatabase mDb;
DbHelper mDbHelper;
Context mContext;
private static final String DB_NAME="exampleDb";//nome del database<!--more-->
private static final int DB_VERSION=1; //numero di versione del nostro database
public MyDatabase(Context ctx){
mContext=ctx;
mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);
}
public void open(){ //apriamo il database, rendendolo scrivibile e leggibile
mDb=mDbHelper.getWritableDatabase();
}
public void close(){ //chiudiamo il database
mDb.close();
}
// Vediamo ora come aggiungere tabelle e campi alle tabelle del db
public void insertPerson(String name,int eta){ //metodo per inserire i dati
ContentValues cv=new ContentValues();
cv.put(PersonMetaData.PERSON_NAME_KEY, name);
cv.put(PersonMetaData.PERSON_AGE_KEY, eta);
mDb.insert(PersonMetaData.PERSON_TABLE, null, cv);
}
public Cursor fetchProducts(){ //metodo per fare la query di tutti i dati
return mDb.query(PersonMetaData.PERSON_TABLE, null,null,null,null,null,null);
}
static class PersonMetaData { // i metadati della tabella, accessibili ovunque
static final String PERSON_TABLE = "person";
static final String ID = "_id";
static final String PERSON_NAME_KEY = "name";
static final String PERSON_AGE_KEY = "eta";
}
private static final String PERSON_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " //codice sql di creazione della tabella
+ PersonMetaData.PERSON_TABLE + " ("
+ PersonMetaData.ID+ " integer primary key autoincrement, "
+ PersonMetaData.PERSON_NAME_KEY + " text not null, "
+ PersonMetaData.PERSON_AGE_KEY + " integer not null);";
private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db
public DbHelper(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
_db.execSQL(PERSON_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
//qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione
}
}
}
[/java]
Creato il database vediamo come implementarlo all’interno di un’activity richiamando gli elementi del db e mostrandoli in una ListView:
[java]public class Example extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView personTv=(TextView)findViewById(R.id.personTv);
ListView peopleLv=(ListView)findViewById(R.id.peopleLv);
MyDatabase db=new MyDatabase(getApplicationContext());
db.open(); //apriamo il db
if(db.fetchProducts().getCount()==0){//query di tutti i dati e inserimento dati, solo se il db è vuoto
db.insertProduct("Fabrizio", 23);
db.insertProduct("Giorgio", 61);
db.insertProduct("Rino", 87);
}
Cursor c=db.fetchProducts(); // Creiamo un cursore con tutti i dati del db
startManagingCursor(c);
SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
this,
R.layout.person, //il layout di ogni riga/prodotto
c,
new String[]{MyDatabase.PersonMetaData.PERSON_NAME_KEY,MyDatabase.PersonMetaData.PERSON_AGE_KEY},//queste colonne
new int[]{R.id.nameTv,R.id.ageTv});//in queste textView
peopleLv.setAdapter(adapter); //L'adapter per la lista
//qui vediamo invece come prendere i dati dal db e visualizzarli nelle textview
int nameCol=c.getColumnIndex(MyDatabase.PersonMetaData.PERSON_NAME_KEY); //indici delle colonne
int ageCol=c.getColumnIndex(MyDatabase.PersonMetaData.PERSON_AGE_KEY);
if(c.moveToFirst()){ //se va alla prima entry, il cursore non è vuoto
do {
personTv.append("Person Name:"+c.getString(nameCol)+", Età:"+c.getInt(ageCol)+"\n"); //estrazione dei dati dalla entry del cursor
} while (c.moveToNext());//iteriamo al prossimo elemento
}
db.close();
}
}
[/java]
Vediamo ora i due file xml correlati, molto semplici:
prima il main
[xml]<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/personTv" android:textColor="#000000" android:textSize="20dp" /> <ListView android:id="@+id/peopleLv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:dividerHeight="2dp" ></ListView> </LinearLayout> [/xml]
Poi abbiamo il layout di ogni singolo elemento della lista:
[xml]<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightSum="10" > <TextView android:id="@+id/nameTv" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="8" android:textSize="15dp" android:textStyle="bold" android:textColor="#000000"> </TextView> <TextView android:id="@+id/ageTv" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:textSize="15dp" android:textStyle="bold" android:textColor="#000000"> </TextView> </LinearLayout> [/xml]
Fonte: anddev.it
Approfondimenti...
Google ha annunciato l’acquisizione del gruppo Motorola Mobility per la modica cifra di 12,5 miliardi di dollari. In questo modo Google, ha fatto...
Michael Stonebraker, noto guru della ricerca sui sistemi di database relazionali, in un articolo apparso su GigaOM che ragiona sul come le start up ripongano...
Sembra siano in arrivo sul mercato i nuovi e ipertecnologici smartphone con sistema operativo Windows Mobile Phone 7 prodotti da Nokia. I modelli dovrebbero...
In questo articolo proseguiamo col confronto tra i migliori smartphone 2011 iniziato in una serie di post precedenti. In questo confronto sono stati presi in...
Viber, è una famosissima applicazione che dopo essere nata per iPhone ha riscosso un successo inimmaginabile in quanto permette in modo assolutamente gratuito...
Commenti...
Questa guida deriva da http://www.anddev.it/index.php?topic=856.0 che ci ha richiesto espressamente di citare la fonte dopo aver trovato questo post.
Andrea la prox volta un linkino in più nell’apposita sezione è sempre ben visto ok?
Grasssiee!


# 03/6/2011 14:39