Qui mi devo focalizzare nel cambiare il tipo di dati da byte[] a String.
Provo a farlo subito...
Innanzitutto devo cambiare le funzioni che compilano il database.
E devo, parallelamente, cambiare anche la classe JImage che assume i dati dell'immagine.
Ecco JImage:
public class JImage { public String etichetta; public String categoria; public String immagine; public String tipo; public int coordX; public int coordY; }No, non devo cambiare la funzione che salva i membri di JImage nel database.
Piuttosto devo cambiare la funzione che crea il database.
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table tabella(_id integer primary key, etichetta text, categoria text, immagine text, tipo text, coordX integer, coordY integer, unique(etichetta, categoria) on conflict fail)");
}
E ora devo modificare la funzione che trasforma l'immagine in una matrice di bytes, perché questa trasformazione deve continuare nella trasformazione in String.
Vado sul codice di ImagePick.
Ecco dove va operato il cambiamento:
bttInvia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
jImage.etichetta=editText.getText().toString();
jImage.categoria=categoria;
//inserire qui il codice che crea un bytearray dall'immagine
img.destroyDrawingCache();
img.buildDrawingCache();
drawingCache=img.getDrawingCache();
immagine=Funzioni.BitmapToByteArray(drawingCache, 80);
jImage.immagine=immagine;
jImage.tipo=tipo;
jImage.coordX=coordX;
jImage.coordY=coordY;
La conversione da Bitmap ad Array di Bytes viene fatta nella funzione BitmapToByteArray del modulo Funzioni.Vado su questo:
public static byte[] BitmapToByteArray(Bitmap bmp, int quality){ ByteArrayOutputStream stream=new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, quality, stream); byte[] b=stream.toByteArray(); return b; }Aggiungo la conversione a String e cambio il tipo della funzione:
public static String BitmapToString(Bitmap bmp, int quality){ ByteArrayOutputStream stream=new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, quality, stream); byte[] b=stream.toByteArray(); String s= Base64.encodeToString(b,Base64.DEFAULT); return s; }Quindi torno sul codice di ImagePick e aggiusto il tipo della variabile immagine fra le dichiarazioni delle variabili di istanza e cambio il nome della funzione che opera la trasformazione:
String immagine;
.....
bttInvia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
jImage.etichetta=editText.getText().toString();
jImage.categoria=categoria;
//inserire qui il codice che crea un bytearray dall'immagine
img.destroyDrawingCache();
img.buildDrawingCache();
drawingCache=img.getDrawingCache();
immagine=Funzioni.BitmapToString(drawingCache, 80);
jImage.immagine=immagine;
jImage.tipo=tipo;
jImage.coordX=coordX;
jImage.coordY=coordY;
E adesso cancello il database (sono con l'emulatore) e ricreo il database con le nuove impostazioni.Sì, il salvataggio avviene!
Nessun commento:
Posta un commento