Intanto lo metto sull'Activity, fisicamente.
<Button android:id="@+id/imgButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignTop="@+id/button1" android:layout_marginRight="40dp" android:layout_toLeftOf="@+id/button1" android:background="#afa" android:textSize="10sp" android:text="MOD. IMMAGINE" />
Ora lo attribuisco a una variabile in MainActivity:
Button imgButton; ..... imgButton=(Button)findViewById(R.id.imgButton);e gli creo un Listener.
Ma per creare un Listener devo prima avere le idee chiare su cosa dovrà fare questo Listener...
Riassumiamo qui i suoi compiti:
Selezionare un'immagine presente in external storage, quindi andare nel database e, laddove categoria ed etichetta della View attiva corrispondano ai campi, updatare il campo immagine.
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI: imgButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setData(Uri.parse("content://media/external/images/media")); startActivityForResult(intent, 0); } });E finora funziona.
Adesso devo far apparire il pulsante solo in modalità settingMode...
Fatto.
Bene, ho scritto la base di onActivityResult.
Ora devo convertire l'immagine specificata dal path in un array di bytes per memorizzarla nel database updatando il record.
Ecco cosa ho scritto finora:
//ONACTIVITYRESULT PER IMGBUTTON CHE MODIFICA LE IMMAGINI protected void onActivityResult(int requestCode , int resultMode, Intent data){ Uri uri= data.getData(); String path=Funzioni.UriToPath(this, uri); byte[] b=Funzioni.PathToByteArray(path, 100, 50); }Ottengo il path dell'immagine convertendo l'Uri mediante la mia funzione UriToPath;
quindi prendo l'immagine e la converto in array di bytes mediante la mia funzione PathToByteArray.
Ora devo updatare il database.
Per fare questo, devo prendere categoria ed etichetta della View attiva, ossia di ActiveOne, e creare un metodo del gestore di database che permetta di updatare il campo di tipo blob che ospita i bytes dell'immagine.
Proviamo...
Ecco, ho scritto una funzione del Database Helper che updata l'immagine date etichetta e categoria.
public void imgUpdate(String etichetta, String categoria, byte[] byteArray){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("immagine", byteArray); db.update("tabella", values, "etichetta='"+etichetta+"' and categoria='"+categoria+"'", null); }Ora proverò a usarla.
Ecco, ho scritto tutto e pare che funzioni:
protected void onActivityResult(int requestCode , int resultMode, Intent data){ Uri uri= data.getData(); String path=Funzioni.UriToPath(this, uri); byte[] b=Funzioni.PathToByteArray(path, 100, 50); //estraiamo il testo di etichetta e categoria TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta); TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria); helper.imgUpdate(et.getText().toString(), cat.getText().toString(), b); refreshScreen(); }
Nessun commento:
Posta un commento