[DEV]: Utilizzare le immagini della galleria nella nostra applicazione

[DEV]: Utilizzare le immagini della galleria nella nostra applicazione
Nel programmare la mia prima applicazione il problema più grande che ho incontrato è stato salvare un immagine, scelta dall’utente dalla sua galleria, sul mio database. Rifacendoci al precedente esempio di come impostare un database, vediamo come modificare tale classe in modo da inserire una tabella che ci servirà per salvare la nostra immagine.

Prima di tutto bisogna definire una tabella nella classe che gestisce il db:

static class Image {  // i metadati della tabella, accessibili ovunque
static final String IMAGE_TABLE = "immagini";
static final String ID = "_id";
static final String IMAGE = "immagine";

}
private static final String IMAGE_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "
+ Image.IMAGE_TABLE + " ("
+ Image.ID+ " integer primary key autoincrement, "
+ Image.IMAGE + " text not null);"

Fatto questo passiamo alla classe in cui vogliamo visualizzare l’immagine scelta:

public class Immagine extends Activity {

private static final int IMAGE_FROM_GALLERY=0;
MyDatabase db;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image);

db=new MyDatabase(getApplicationContext());

db.open();
Cursor cursor=null;
String sql="SELECT immagine FROM immagini";
cursor=db.rawQuery(sql, null);
startManagingCursor(cursor);

if(cursor.moveToFirst()){
((ImageView)findViewById(R.id.image)).setImageURI(Uri.parse(cursor.getString(0)));
}

editimg.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {   //apre la galleria

Intent i = new Intent( Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI );
startActivityForResult( i, IMAGE_FROM_GALLERY );

}

}

Nel codice sopra abbiamo aperto il database e tramite una query sql abbiamo ottenuto le immagini presenti
nella tabella del db. Poi apriamo la galleria tramite il pulsante editImg e assegnamo all’imageView
presente nell’xml l’uri che andiamo a leggere sempre nella tabella delle immagini,
ma siccome è salvato come una stringa dobbiamo fare il parse();

@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data ) {

if ( requestCode == IMAGE_FROM_GALLERY ) {

if ( resultCode == RESULT_OK ) {
Uri selectedImage = data.getData();
db.deleteAllImg();
db.insertImg(selectedImage.toString());
launchImageActivity();
}

//assegni alla tua ImageView l'immagine selezionata
}

super.onActivityResult( requestCode, resultCode, data );
}

Quest'ultimo è il metodo collegato all'apertura della galleria con il quale riusciamo ad
ottenere l'url dell'immagine scelta dall'utente per salvarlo nel db.
Il metodo db.deleteAllImg() serve per cancellare ogni immagine presente nella tabella
prima di sceglierne una nuova.
Questo ci serve perchè nel codice sopra avevamo chiesto al cursore di ritornare solamente
la prima occorrenza della
tabella in quanto a noi serve sapere qual'è l'ultima immagine scelta.
Dopo aver cancellato si inserisce la nuova immagine scelta,
cosi da avere sempre come prima occorrenza l'ultima scelta dell'utente.
Infine lanciamo di nuovo l'activity dell'immagine per aggiornare.

Tags: , ,

2 Commenti

  1. Perché non scrivi una bella guida completa alla programmazione? O almeno all’appinventor? Sarebbe fantastico. :)

  2. Mastermarks

    Cioè ma è quasi identico a Java!! Allora fra un po’ potrei anche cominciare a programmare su android :-D

Commenta!