- Ricostruire l'activity per l'aggiunta di records nel database con immagine e edittext
- Addestrarsi all'uso del NumberPicker
- Allineamento nel LinearLayout
JavascriptProva
martedì 25 aprile 2017
Altri esercizi sui database
Esercizio:
1) Eliminazione di un record da una tabella
2)Modifica di un campo di un record.
Ora scrivo una procedura per eliminare il terzo record.
Provo con questa (nella classe Helper):
Operazione combinata di modifica e cancella. Modifico Giuseppe Verdi in Giuseppe Rossi e poi cancello Verdi.
Doppia modifica:
Provo così:
Due clausole:
1) Eliminazione di un record da una tabella
2)Modifica di un campo di un record.
public class MainActivity extends AppCompatActivity {
Helper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper=new Helper(this);
helper.save("Mario","Rossi");
helper.save("Mario","Verdi");
helper.save("Giuseppe","Verdi");
/
Cursor crs=helper.query();
do{
System.out.println(crs.getString(crs.getColumnIndex("nome"))+" "+crs.getString(crs.getColumnIndex("cognome")));
}while(crs.moveToNext());
}
}
class Helper extends SQLiteOpenHelper {
public Helper(Context context) {
super(context, "database.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table tabella(_id integer primary key, nome text, cognome text)");
}
public void save(String n, String c){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("nome",n);
values.put("cognome",c);
try {
db.insertOrThrow("tabella", null, values);
}catch(SQLException e){
System.out.println(e.getMessage());
}
}
public Cursor query(){
SQLiteDatabase db=this.getReadableDatabase();
Cursor crs=db.rawQuery("select*from tabella",null);
crs.moveToFirst();
return crs;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Inseriamo la funzione che modifica:
public void save(String n, String c){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("nome",n);
values.put("cognome",c);
try {
db.insertOrThrow("tabella", null, values);
}catch(SQLException e){
System.out.println(e.getMessage());
}
}
public void modifica(String vecchio,String nuovo){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("update tabella set nome='"+nuovo+"' where nome='"+vecchio+"'");
}
Ora lo metto in opera:
helper=new Helper(this);
helper.save("Mario","Rossi");
helper.save("Mario","Verdi");
helper.save("Giuseppe","Verdi");
helper.modifica("Giuseppe","Pippo");
Vediamo...04-25 14:57:01.773 6034-6034/? I/System.out: Mario Rossi 04-25 14:57:01.773 6034-6034/? I/System.out: Mario Verdi 04-25 14:57:01.774 6034-6034/? I/System.out: Pippo VerdiRicordare che il comando SQL inizia con UPDATE tabella, e poi SET... WHERE non è difficile.
Ora scrivo una procedura per eliminare il terzo record.
Provo con questa (nella classe Helper):
public void cancella(String n){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("delete from tabella where nome='"+n+"'");
}
E la provo:
helper=new Helper(this);
helper.save("Mario","Rossi");
helper.save("Mario","Verdi");
helper.save("Giuseppe","Verdi");
helper.cancella("Giuseppe");
Ecco:
04-25 15:03:58.850 9661-9661/? I/System.out: Mario Rossi 04-25 15:03:58.850 9661-9661/? I/System.out: Mario VerdiAncora con un altro nome. Riscrivo daccapo per allenarmi:
public void cancella(String c){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("delete from tabella where cognome='"+c+"'");
}
helper=new Helper(this);
helper.save("Mario","Rossi");
helper.save("Mario","Verdi");
helper.save("Giuseppe","Verdi");
helper.cancella("Rossi");
04-25 15:07:32.736 11681-11681/? I/System.out: Mario Verdi 04-25 15:07:32.736 11681-11681/? I/System.out: Giuseppe Verdi
Operazione combinata di modifica e cancella. Modifico Giuseppe Verdi in Giuseppe Rossi e poi cancello Verdi.
public void modifica(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("update tabella set cognome='Rossi' where nome='Giuseppe'");
}
public void cancella(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("delete from tabella where cognome='Verdi'");
}
Provo:
helper=new Helper(this);
helper.save("Mario","Rossi");
helper.save("Mario","Verdi");
helper.save("Giuseppe","Verdi");
helper.modifica();
helper.cancella();
04-25 15:14:49.741 15579-15579/? I/System.out: Mario Rossi 04-25 15:14:49.741 15579-15579/? I/System.out: Giuseppe Rossiperfetto!
Doppia modifica:
public void modifica(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("update tabella set cognome='La Minchia' and nome='Cicciobello' where nome='Giuseppe'");
}
No, ottengo uno zero.Provo così:
public void modifica(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("update tabella set cognome='La Minchia', nome='Cicciobello' where nome='Giuseppe'");
}
04-25 15:19:57.107 18596-18596/? I/System.out: Mario Rossi 04-25 15:19:57.108 18596-18596/? I/System.out: Mario Verdi 04-25 15:19:57.108 18596-18596/? I/System.out: Cicciobello La MinchiaPerfetto!
Due clausole:
public void modifica(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("update tabella set cognome='La Minchia' where nome='Mario' and cognome='Rossi'");
}
helper=new Helper(this);
helper.save("Mario","Rossi");
helper.save("Mario","Verdi");
helper.save("Giuseppe","Verdi");
helper.modifica();
04-25 15:47:10.068 519-519/? I/System.out: Mario La Minchia 04-25 15:47:10.069 519-519/? I/System.out: Mario Verdi 04-25 15:47:10.069 519-519/? I/System.out: Giuseppe VerdiOkay.
Esercizi sui database
Rifaccio gli esercizi sui database.
1) Inserire diversi records con i campi nome e cognome, in cui vi sia il vincolo di cognome unico, e l'inserimento di records con cognome ripetuto determini la comparsa di un messaggio di errore in LogCat.
2) Inserire record in cui il vincolo sia soltanto di nome e cognome ambedue ripetuti, sempre con segnalazione dell'errore in LogCat.
3)Modificare il nome di uno o più records.
CREAZIONE GENERALE DI UN SEMPLICE DATABASE.
CREAZIONE DI UN VINCOLO DI UNICITA'.
Se viene lasciato insert al posto di insertOrThrow, l'inserimento del record viene semplicemente ignorato senza segnalare alcun errore.
Se insert viene sostituito con insertOrThrow l'errore viene rilevato e il programma si interrompe.
Se invece "catturo" l'errore con un ciclo try...catch, il programma viene eseguito e l'errore può essere gestito con la comparsa di un messaggio nel quale figura anche il campo responsabile dell'errore, cosa che mi permette di avvisare l'utente circa l'errore e la sua causa.
VINCOLO DI UNICITA' DELLA COMBINAZIONE DI PIU' CAMPI DELLA TABELLA
MODIFICA DEL VALORE DI UN CAMPO DELLA TABELLA
1) Inserire diversi records con i campi nome e cognome, in cui vi sia il vincolo di cognome unico, e l'inserimento di records con cognome ripetuto determini la comparsa di un messaggio di errore in LogCat.
2) Inserire record in cui il vincolo sia soltanto di nome e cognome ambedue ripetuti, sempre con segnalazione dell'errore in LogCat.
3)Modificare il nome di uno o più records.
CREAZIONE GENERALE DI UN SEMPLICE DATABASE.
CREAZIONE DI UN VINCOLO DI UNICITA'.
Se viene lasciato insert al posto di insertOrThrow, l'inserimento del record viene semplicemente ignorato senza segnalare alcun errore.
Se insert viene sostituito con insertOrThrow l'errore viene rilevato e il programma si interrompe.
Se invece "catturo" l'errore con un ciclo try...catch, il programma viene eseguito e l'errore può essere gestito con la comparsa di un messaggio nel quale figura anche il campo responsabile dell'errore, cosa che mi permette di avvisare l'utente circa l'errore e la sua causa.
VINCOLO DI UNICITA' DELLA COMBINAZIONE DI PIU' CAMPI DELLA TABELLA
MODIFICA DEL VALORE DI UN CAMPO DELLA TABELLA
mercoledì 19 aprile 2017
Creazione di funzioni separate per la conversione Uri-Path, Path-Bitmap e Bitmap-Stringa
Ora voglio rendere funzione autonoma la conversione del Path in Bitmap e di questa in Stringa.
Innanzitutto che parametro bisogna avere per ottenere il Path dall'Uri restituito da data.getData()?
La funzione deve restituire una String e avere come parametro un Uri.
Proviamo...
Ora vediamo per la trasformazione del Path in Bitmap.
La funzione restituisce Bitmap, e deve avere come parametro Path.
Ora la funzione che ha per tipo String e per parametro Bitmap per la trasformazione di Bitmap in una String.
Sì, ho testato funzione per funzione e funzionano tutte.
Potrei tenere una libreria per la conversione, da inserire in ogni mio programma per il quale ce ne fosse l'utilità.
Innanzitutto che parametro bisogna avere per ottenere il Path dall'Uri restituito da data.getData()?
La funzione deve restituire una String e avere come parametro un Uri.
Proviamo...
private String UriToPath(Uri foundUri){
Cursor crs=getApplicationContext().getContentResolver().query(foundUri,null,null,null,null);
crs.moveToFirst();
int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String s=crs.getString(indice);
return s;
}
Dovrebbe funzionare.Ora vediamo per la trasformazione del Path in Bitmap.
La funzione restituisce Bitmap, e deve avere come parametro Path.
private Bitmap PathToBitmap(String path){
Bitmap bmp= BitmapFactory.decodeFile(path);
return bmp;
}
C'era un modo per ricavare bmp più piccole e meno pesanti, e su quello mi devo esercitare dopo perché non sono sicuro di ricordarlo a memoria.Ora la funzione che ha per tipo String e per parametro Bitmap per la trasformazione di Bitmap in una String.
private String BitmapToString(Bitmap bmp){
ByteArrayOutputStream stream=new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
byte[] b =stream.toByteArray(b);
String s= Base64.encodeToString(b,Base64.DEFAULT);
return s;
}
Ora mettiamole in sequenza facendo scrivere la sringa in LogCat.Sì, ho testato funzione per funzione e funzionano tutte.
Potrei tenere una libreria per la conversione, da inserire in ogni mio programma per il quale ce ne fosse l'utilità.
martedì 18 aprile 2017
Prendendo il Cursor dalla tabella del database, vorrei fare di ognuno un'immagine.
Per disporre una griglia di immagini, indipendentemente dal contenuto, devo avere:
Se voglio questa funzione dal resto, posso creare un arraylist di immagini e tags e quindi disporla come parametro, usando il size dell'arraylist.
Il vantaggio è che ho una funzione separata e quindi più gestibile e più facile da revisionare.
Lo svantaggio è che devo prima trasferire i valori dei campi del Cursor in un arrayList.
Proviamo...
Ora devo creare la funzione a parte, che avendo questo array come parametro crea le immagini.
Per disporre una griglia di immagini, indipendentemente dal contenuto, devo avere:
- il numero degli elementi
- la lunghezza delle linee.
Se voglio questa funzione dal resto, posso creare un arraylist di immagini e tags e quindi disporla come parametro, usando il size dell'arraylist.
Il vantaggio è che ho una funzione separata e quindi più gestibile e più facile da revisionare.
Lo svantaggio è che devo prima trasferire i valori dei campi del Cursor in un arrayList.
Proviamo...
//PRENDERE TUTTI I RECORDS
Cursor crs=helper.query();
ArrayList<imgStorage> imgStorageArrayList=new ArrayList<imgStorage>();
do{
imgStorageArrayList.add(new imgStorage(crs.getString(2),crs.getString(2)));
}while(crs.moveToNext());
System.out.println(imgStorageArrayList.size());
Funziona.
Ora devo creare la funzione a parte, che avendo questo array come parametro crea le immagini.
private void disponi(ArrayList<imgStorage> arrayStorage,int rowlength){
for(int i=0;i<arrayStorage.size();i++){
imageView=new ImageView(getApplicationContext());
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(100,100);
params.leftMargin=i%rowlength*100;
params.topMargin=i/rowlength*100;
imageView.setLayoutParams(params);
mainLayout.addView(imageView);
imageView.setTag(arrayStorage.get(i).getNome());
System.out.println(arrayStorage.get(1).getNome());
}
}
e sembra funzionare egregiamente.
domenica 16 aprile 2017
Esercizio su scelta di un'immagine dal contentprovider, trasformazione in stringa e ritrasformazione in bitmap
Prendere un'immagine dalla memoria e trasformarla in stringa.
Ecco tutto l'esercizio: trasformata in stringa e poi ritrasformata in bitmap in modo da farla apparire nell'ImageView.
Ecco tutto l'esercizio: trasformata in stringa e poi ritrasformata in bitmap in modo da farla apparire nell'ImageView.
public class MainActivity extends AppCompatActivity {
Bitmap bmp;
ImageView imageView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageView);
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(200,200);
params.leftMargin=200;
params.topMargin=0;
imageView.setLayoutParams(params);
button=(Button)findViewById(R.id.button);
button.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);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode==RESULT_OK){
Cursor crs=getApplicationContext().getContentResolver().query(data.getData(),null,null,null,null);
crs.moveToFirst();
int index=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String s=crs.getString(index);
bmp= BitmapFactory.decodeFile(s);
ByteArrayOutputStream stream=new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
byte[] b=stream.toByteArray();
String strImage= Base64.encodeToString(b,Base64.DEFAULT);
System.out.println(strImage);
byte[] c=Base64.decode(strImage,Base64.DEFAULT);
bmp=BitmapFactory.decodeByteArray(c,0,c.length);
imageView.setImageBitmap(bmp);
}
sabato 15 aprile 2017
Esercizio sulla selezione di contenuti dal ContentProvider e sul ricavare il Path dall'Uri
Vediamo come si risale dall'URI al Path, e quindi prendere l'immagine dal Path.
Bisogna andare su ContentResolver.
Intanto creiamo un "imagepicker".
Uri dovrebbe essere l'indirizzo di una tabella che forse appartiene a qualcosa chiamato ContentProvider.
E vediamo che è 'sto ContentProvider.
Un'idea l'ho avuta: qui c'è solo da imparare a memoria gli URI, salvo creare dei ContentProvider, cosa che è ancora tutta da imparare.
Mi sono scordato TUTTO sull'uso dell'Intent per selezionare una risorsa da un ContentProvider mediante l'URI.
E quante volte mi devo esercitare?
Finora questo, ricostruito faticosamente, mi è riuscito:
Ho ottenuto l'URI, ma non il Path.
Ammettiamo che ci sia una tabella con tante colonne, una che sia ID, altre ancora fra cui una che sia il PATH della risorsa.
public class MainActivity extends AppCompatActivity { Bitmap bmp; ImageView imageView; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(200,200); params.leftMargin=0; params.topMargin=200; imageView.setLayoutParams(params); button=(Button)findViewById(R.id.button); button.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); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK){ System.out.println(data.getData()); } } } Per arrivare al PATH dobbiamo entrare nella tabella con il ContentResolver fornendo l'URI, in modo che ci riposizioniamo sul record, quindi dobbiamo trovare la colonna nella quale vi sia il PATH.
Il nome della colonna (ossia del campo) mi resta misterioso. E devo impararlo a memoria.
Ora provo a desumermi il PATH in questo modo.
Innanzitutto devo ottenere sotto forma di Cursor il record corrispondente all'URL:
L'accesso alla risorsa sarà sempre fatto tramite l'Uri.
Ora, partendo da questo scheletro, riscrivere tutto:
Per il resto è tutto stato scritto correttamente.
Bisogna andare su ContentResolver.
Intanto creiamo un "imagepicker".
Uri dovrebbe essere l'indirizzo di una tabella che forse appartiene a qualcosa chiamato ContentProvider.
E vediamo che è 'sto ContentProvider.
Un'idea l'ho avuta: qui c'è solo da imparare a memoria gli URI, salvo creare dei ContentProvider, cosa che è ancora tutta da imparare.
Mi sono scordato TUTTO sull'uso dell'Intent per selezionare una risorsa da un ContentProvider mediante l'URI.
E quante volte mi devo esercitare?
Finora questo, ricostruito faticosamente, mi è riuscito:
public class MainActivity extends AppCompatActivity {
Bitmap bmp;
ImageView imageView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageView);
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(200,200);
params.leftMargin=0;
params.topMargin=200;
imageView.setLayoutParams(params);
button=(Button)findViewById(R.id.button);
button.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);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode==RESULT_OK){
System.out.println(data.getData());
}
}
}
Ma non è ancora sufficiente.Ho ottenuto l'URI, ma non il Path.
Ammettiamo che ci sia una tabella con tante colonne, una che sia ID, altre ancora fra cui una che sia il PATH della risorsa.
public class MainActivity extends AppCompatActivity { Bitmap bmp; ImageView imageView; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(200,200); params.leftMargin=0; params.topMargin=200; imageView.setLayoutParams(params); button=(Button)findViewById(R.id.button); button.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); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK){ System.out.println(data.getData()); } } } Per arrivare al PATH dobbiamo entrare nella tabella con il ContentResolver fornendo l'URI, in modo che ci riposizioniamo sul record, quindi dobbiamo trovare la colonna nella quale vi sia il PATH.
Il nome della colonna (ossia del campo) mi resta misterioso. E devo impararlo a memoria.
Ora provo a desumermi il PATH in questo modo.
Innanzitutto devo ottenere sotto forma di Cursor il record corrispondente all'URL:
Cursor crs=getApplicationContext().getContentResolver().query(data.getData(),null,null,null,null);Quindi trovare il numero della colonna dove è conservato il PATH (che è da imparare a memoria, almeno per il momento, dato che mi sfuggono completamente i criteri):
crs.moveToFirst();
int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
E quindi ricavare la stringa presente in quel numero di colonna:
String s=crs.getString(indice);
L'accesso alla risorsa sarà sempre fatto tramite l'Uri.
Ora, partendo da questo scheletro, riscrivere tutto:
public class MainActivity extends AppCompatActivity {
Bitmap bmp;
ImageView imageView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageView);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
}
});
}
}
compresi dimensioni e posizione dell'imageView in fondo a destra.
public class MainActivity extends AppCompatActivity {
Bitmap bmp;
ImageView imageView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageView);
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(200,200);
params.leftMargin=200;
params.topMargin=0;
imageView.setLayoutParams(params);
button=(Button)findViewById(R.id.button);
button.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);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode==RESULT_OK){
Cursor crs=getApplicationContext().getContentResolver().query(data.getData(),null,null,null,null);
crs.moveToFirst();
int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String s=crs.getString(indice);
System.out.println(s);
}
}
}
Ho corretto la posizione dell'immagine perché avevo usato rightMargin e bottomMargin ma l'immagine mi veniva posizionata in alto a sinistra piuttosto che in basso a destra.Per il resto è tutto stato scritto correttamente.
venerdì 14 aprile 2017
Esercizio di conversione di immagine in array di bytes e quindi in stringa con procedimento inverso
Ora, convertita l'immagine in un array di byte, bisogna convertire questo in una stringa.
Ecco l'esercizio di conversione a stringa e riconversione a immagine:
Ecco l'esercizio di conversione a stringa e riconversione a immagine:
public class MainActivity extends AppCompatActivity {
Bitmap bmp;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageView);
bmp= BitmapFactory.decodeResource(getResources(),R.drawable.android);
ByteArrayOutputStream stream=new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
byte[] b=stream.toByteArray();
String s= Base64.encodeToString(b,Base64.DEFAULT);
byte[]c=Base64.decode(s,Base64.DEFAULT);
bmp=BitmapFactory.decodeByteArray(c,0,c.length);
imageView.setImageBitmap(bmp);
}
}
Iscriviti a:
Commenti (Atom)