JavascriptProva

mercoledì 5 aprile 2017

Creazione di librerie in Android Studio

Ora provo passo passo a creare una libreria.

File -> New Module -> Android Library
Scelta del nome dell'applicazione e del nome del modulo.

Android Studio elabora...

E' apparsa la cartella mylibrary (nome scelto per il modulo).


Ora devo agire su Gradle.
Apro Settings.Gradle e mi appare questo:
include ':app', ':mylibrary'




Quindi apro build.gradle(Module app).
E mi appare questo:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"
    defaultConfig {
        applicationId "com.antonello.laboratoriolibrerie"
        minSdkVersion 18
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}
e vi devo aggiungere la riga:
....

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'

compile project (":mylibrary")
}
e quindi clicco Sync Now sulla barra di Gradle.
Bene, ora ho una libreria senza libri!
Provo ad eseguire...

Non succede nulla, ovviamente.
Ora provo a istanziare una fantomatica classe...
public class MainActivity extends AppCompatActivity {

    Classe classe;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        classe=new Classe();
    }
}
Ottengo messaggi di errore.

Quindi prendo mylibrary - java - com.antonello.mylibrary e ci aggiungo una classe chiamata Classe con il seguente codice:
public class Classe {
    private int numero;
    
    public void setNumero(int n){
        numero=n;
    }
    
    public int getNumero(){
        return numero;
    }
}
Ora torno su MainActivity e riprovo a istanziare la classe Classe:
public class MainActivity extends AppCompatActivity {
    
    Classe classe;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        classe = new Classe();
        classe.setNumero(246);
        System.out.println(classe.getNumero());
    }
}
Non ottengo messaggi di errore.
Eseguo:
04-05 21:59:26.757 9815-9815/? I/System.out: 246



Ecco, dopo vari problemi e distrazioni (mancanza di spazio sull'emulatore, collegamento erroneo del cellulare reale al computer...) alla fine la cosa è riuscita!

mercoledì 29 marzo 2017

Esercizi di estrazione casuale di una lista senza ripetizioni

Deve essere estratto dal database un numero di records pari a un numero già concordato e salvato in memoria.
La sequenza è:
  • prima recuperare dalla memoria il numero di immagini da recuperare;
  • il database può essere di dimensioni superiori, uguali o inferiori a quel numero. Nel caso sia di dimensioni uguali o superiori non ci sono problemi, mentre se è più piccolo è necessario ridimensionare il numero di immagini da recuperare.
  • fatto questo, si crea un ArrayList delle dimensioni del cursor.
  • Ora bisogna mettere tutti i record del cursor nell'ArrayList... o procedere in un altro modo.
Io ho messo tutti i numeri ordinali dei record da 0 a size-1.
Estraggo a sorte uno di questi items dell'arrayList e quindi mi sposto nella posizione del record che ha per numero ordinale il numero estratto, lavorandoci. Nel frattempo elimino l'item estratto dall'arrayList.

Sarà utile che mi eserciti un po' nel creare un cursor e fare l'estrazione mediante ArrayList senza ripetizioni.
Allestisco una prova di laboratorio.
public class MainActivity extends AppCompatActivity {

    ArrayList<String> lista;
    int index;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lista=new ArrayList<String>();

        lista.add("Gongolo");
        lista.add("Mammolo");
        lista.add("Pisolo");
        lista.add("Eolo");
        lista.add("Cucciolo");
        lista.add("Brontolo");
        lista.add("Dotto");

        Random rnd=new Random();
        while(lista.size()!=0) {
            index = rnd.nextInt(lista.size());
            System.out.println(lista.get(index));
            lista.remove(index);
        }
    }
}
E adesso lo faccio "correre":
03-28 20:25:26.780 3456-3456/? I/System.out: Pisolo
03-28 20:25:26.780 3456-3456/? I/System.out: Brontolo
03-28 20:25:26.780 3456-3456/? I/System.out: Eolo
03-28 20:25:26.780 3456-3456/? I/System.out: Mammolo
03-28 20:25:26.780 3456-3456/? I/System.out: Cucciolo
03-28 20:25:26.780 3456-3456/? I/System.out: Dotto
03-28 20:25:26.780 3456-3456/? I/System.out: Gongolo
Faccio tante ripetizioni per verificare l'estrazione casuale:
03-28 20:32:32.265 3543-3543/? I/System.out: Gongolo
03-28 20:32:32.265 3543-3543/? I/System.out: Eolo
03-28 20:32:32.265 3543-3543/? I/System.out: Pisolo
03-28 20:32:32.265 3543-3543/? I/System.out: Cucciolo
03-28 20:32:32.265 3543-3543/? I/System.out: Dotto
03-28 20:32:32.265 3543-3543/? I/System.out: Mammolo
03-28 20:32:32.265 3543-3543/? I/System.out: Brontolo
03-28 20:34:23.649 3616-3616/? I/System.out: Gongolo
03-28 20:34:23.649 3616-3616/? I/System.out: Brontolo
03-28 20:34:23.649 3616-3616/? I/System.out: Pisolo
03-28 20:34:23.649 3616-3616/? I/System.out: Eolo
03-28 20:34:23.649 3616-3616/? I/System.out: Dotto
03-28 20:34:23.649 3616-3616/? I/System.out: Cucciolo
03-28 20:34:23.650 3616-3616/? I/System.out: Mammolo
03-28 20:37:46.942 3749-3749/? I/System.out: Gongolo
03-28 20:37:46.942 3749-3749/? I/System.out: Mammolo
03-28 20:37:46.942 3749-3749/? I/System.out: Dotto
03-28 20:37:46.942 3749-3749/? I/System.out: Brontolo
03-28 20:37:46.942 3749-3749/? I/System.out: Pisolo
03-28 20:37:46.942 3749-3749/? I/System.out: Eolo
03-28 20:37:46.942 3749-3749/? I/System.out: Cucciolo

Sì, ho trovato un buon modo di estrarre a sorte uno per volta dei valori.

Ora lo faccio usando come elementi dell'ArrayList dei numeri.
public class MainActivity extends AppCompatActivity {

    ArrayList<Integer> lista;
    int index;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lista=new ArrayList<Integer>();

        for(int i=0;i<10;i++){
            lista.add(i);
        }


        Random rnd=new Random();
        while(lista.size()!=0) {
            index = rnd.nextInt(lista.size());
            System.out.println(lista.get(index));
            lista.remove(index);
        }
    }
} 
03-28 21:29:46.359 3973-3973/? I/System.out: 0
03-28 21:29:46.359 3973-3973/? I/System.out: 9
03-28 21:29:46.359 3973-3973/? I/System.out: 5
03-28 21:29:46.359 3973-3973/? I/System.out: 4
03-28 21:29:46.359 3973-3973/? I/System.out: 7
03-28 21:29:46.359 3973-3973/? I/System.out: 2
03-28 21:29:46.359 3973-3973/? I/System.out: 8
03-28 21:29:46.359 3973-3973/? I/System.out: 6
03-28 21:29:46.359 3973-3973/? I/System.out: 1
03-28 21:29:46.359 3973-3973/? I/System.out: 3
03-28 21:30:25.504 4025-4025/? I/System.out: 9
03-28 21:30:25.504 4025-4025/? I/System.out: 6
03-28 21:30:25.505 4025-4025/? I/System.out: 5
03-28 21:30:25.505 4025-4025/? I/System.out: 0
03-28 21:30:25.505 4025-4025/? I/System.out: 3
03-28 21:30:25.505 4025-4025/? I/System.out: 2
03-28 21:30:25.505 4025-4025/? I/System.out: 4
03-28 21:30:25.505 4025-4025/? I/System.out: 1
03-28 21:30:25.505 4025-4025/? I/System.out: 7
03-28 21:30:25.505 4025-4025/? I/System.out: 8
03-28 21:31:10.420 4078-4078/? I/System.out: 2
03-28 21:31:10.420 4078-4078/? I/System.out: 3
03-28 21:31:10.420 4078-4078/? I/System.out: 7
03-28 21:31:10.420 4078-4078/? I/System.out: 0
03-28 21:31:10.420 4078-4078/? I/System.out: 4
03-28 21:31:10.420 4078-4078/? I/System.out: 8
03-28 21:31:10.420 4078-4078/? I/System.out: 1
03-28 21:31:10.420 4078-4078/? I/System.out: 9
03-28 21:31:10.420 4078-4078/? I/System.out: 5
03-28 21:31:10.420 4078-4078/? I/System.out: 6
Sì, funziona anche questo.

lunedì 27 febbraio 2017

Posso operare la mia scelta fino al numero di record contenuti nel database.
Se il database aumenta numero, aumenta il numero massimo.
Se il database diminuisce il numero di immagini, diminuisce il numero massimo.
Come si fa a modificare un numberpicker da programma?
C'è modo, usando setValue.
Dunque, noi salviamo il numero di immagini che vogliamo in SharedPreferences.
Quindi se aumenta il numero di immagini nel database non salviamo niente ma modifichiamo il valore massimo al numero delle immagini del database.
Se invece diminuisce il numero di immagini nel database e diventa minore del numero salvato, allora bisogna ridurre il numero salvato.
L'unico numero che devo salvare è il numero di immagini volute.
Nell'activity Settings devo modificare il NumberPicker con un limite massimo nel valore dato dal numero di records nel database, e qui salvare il numero di immagini volute.

mercoledì 22 febbraio 2017

Estrazione a sorte di diverse ImageView mediante un ArrayList

Ho risolto il problema delle tre immagini.
Ecco il codice:
public class MainActivity extends AppCompatActivity {

    ImageView image1,image2,image3;
    View.OnTouchListener onTouchListener;


    ArrayList lista=new ArrayList();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        image1=(ImageView)findViewById(R.id.imageView);
        image2=(ImageView)findViewById(R.id.imageView2);
        image3=(ImageView)findViewById(R.id.imageView3);
        image1.setImageResource(R.drawable.android);
        image1.setTag("omino");

        image2.setImageResource(R.drawable.cattivik);
        image2.setTag("cattivik");

        image3.setImageResource(R.drawable.facciadicazzo);
        image3.setTag("pupuccio");

        lista.add(image1);
        lista.add(image2);
        lista.add(image3);

        Random random=new Random();
        int numero=random.nextInt(3);
        final ImageView estratta=lista.get(numero);
        System.out.println(estratta.getTag());

       onTouchListener =new View.OnTouchListener() {

           @Override
           public boolean onTouch(View v, MotionEvent event) {
               if(v==estratta){
                   System.out.println("ESATTA");
               }
               else{
                   System.out.println("FALSA");
               }
               return false;
           }
       };
        image3.setOnTouchListener(onTouchListener);
        image1.setOnTouchListener(onTouchListener);
        image2.setOnTouchListener(onTouchListener);


    }
}
Parto da tre ImageView che caricano immagini prese, in questo caso, dalle risorse (ma che nel programma definitivo andranno prese dal database), e le inserisco in un ArrayList di ImageViews.
La didascalia è compresa nel loro Tag.
Estraggo a sorte l'indice della ArrayList, e identifico con la variabile "estratta" di tipo ImageView la ImageView corrispondente all'indice estratto a sorte.
Quindi accomuno il listener onTouchListener alle tre ImageView, e se la sorgente dell'evento è quella estratta ottengo un comportamento, mentre se non lo è ottengo un altro comportamento.

sabato 18 febbraio 2017

Esercizio sulle conversioni di indirizzi in immagini come bitmap, array di bytes e stringhe

Ripasso tutte le conversioni di immagini.
  • Uri a Path
  • da Path a Bitmap
  • da Bitmap a byte array (salvabile come blob)
  • da Bitmap a byte array e quindi a stringa (salvabile come stringa e con possibilità di interazione con il database online.

Da Uri a Path:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @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) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            System.out.println(UriToPath(data.getData()));


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }
02-18 23:15:29.203 4670-4670/? I/System.out: /storage/sdcard/DCIM/facciadaculo.jpeg


Da Path a Bitmap:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @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) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            String s=UriToPath(data.getData());
            Bitmap b=PathToBitmap(s,300);
            imageView.setImageBitmap(b);


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }

    private Bitmap PathToBitmap(String path, int dimensioni){
        BitmapFactory.Options opzioni=new BitmapFactory.Options();
        opzioni.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path);
        int fattore=1;
        while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){
            fattore*=2;
        }
        opzioni.inSampleSize=fattore;
        opzioni.inJustDecodeBounds=false;
        Bitmap bmp=BitmapFactory.decodeFile(path,opzioni);
        return bmp;
    }
}
E funziona anche questa.
Da Bitmap a byte array:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @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) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            String s=UriToPath(data.getData());
            Bitmap b=PathToBitmap(s,300);
            byte[] bt=BitmapToByteArray(b);
            System.out.println(bt);


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }

    private Bitmap PathToBitmap(String path, int dimensioni){
        BitmapFactory.Options opzioni=new BitmapFactory.Options();
        opzioni.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path);
        int fattore=1;
        while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){
            fattore*=2;
        }
        opzioni.inSampleSize=fattore;
        opzioni.inJustDecodeBounds=false;
        Bitmap bmp=BitmapFactory.decodeFile(path,opzioni);
        return bmp;
    }

    private byte[] BitmapToByteArray(Bitmap bmp){
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
        byte[] b=stream.toByteArray();
        return b;
    }


}
02-18 23:25:30.707 4855-4855/? I/System.out: [B@1a6afe00

(questa non la capisco... forse si tratta perlopiù di numeri non traducibili in caratteri)
Da bitmap a stringa:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @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) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            String s=UriToPath(data.getData());
            Bitmap b=PathToBitmap(s,300);
            String stringa=BitmapToString(b);
            System.out.println(stringa);


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }

    private Bitmap PathToBitmap(String path, int dimensioni){
        BitmapFactory.Options opzioni=new BitmapFactory.Options();
        opzioni.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path);
        int fattore=1;
        while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){
            fattore*=2;
        }
        opzioni.inSampleSize=fattore;
        opzioni.inJustDecodeBounds=false;
        Bitmap bmp=BitmapFactory.decodeFile(path,opzioni);
        return bmp;
    }

    private byte[] BitmapToByteArray(Bitmap bmp){
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
        byte[] b=stream.toByteArray();
        return b;
    }
    private String BitmapToString(Bitmap bmp){
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
        byte[] b=stream.toByteArray();
        String s= Base64.encodeToString(b,Base64.DEFAULT);
        return s;
    }


}
02-18 23:30:24.629 4970-4970/? I/System.out: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
02-18 23:30:24.629 4970-4970/? I/System.out: FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
02-18 23:30:24.629 4970-4970/? I/System.out: KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAFAAUADASIA
02-18 23:30:24.629 4970-4970/? I/System.out: AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
02-18 23:30:24.629 4970-4970/? I/System.out: AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3

.....

...che sarebbe una minima parte della stringa che rappresenterebbe la mia faccia.

mercoledì 8 febbraio 2017

Conversione di immagine bitmap in stringa.

Salviamo immagini in un database.
Ho appreso, e usato, il modo di salvare un'immagine sotto forma di stringa.
Vado a ripassarlo.
L'ho trovato

Ci provo. Converto l'immagine "bonazza" che ho già usato per porla in una ImageView.
public class MainActivity extends AppCompatActivity {

    TextView textView;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView)findViewById(R.id.textView);
        Bitmap bmp;
        bmp= BitmapFactory.decodeResource(getResources(),R.drawable.bonazza);


        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,100,stream);
        byte[] b=stream.toByteArray();
        String s= Base64.encodeToString(b,Base64.DEFAULT);
        System.out.println(s);

    }
}
Ed ecco:
02-08 18:27:58.807 4224-4224/? I/System.out: 5nX684z+PBzknqy/EZ3WdpYiPRWtDXVP+bs4rfZvW92cvtJa6vpbytvstb2Vu3m1r+Y2tfAu4hea
02-08 18:27:58.807 4224-4224/? I/System.out: eKGZYz/qikjgZy4bIVh0wvB6Eng7iTw8vw18VaW6PZXF4uHXCFyV4Ldix4PTr688nH6Z6n4fjj86
02-08 18:27:58.807 4224-4224/? I/System.out: 2LqyxkFeDjJMueoz1TPXuevNclN4atS8ZYRttkTOVJzy3qvHB/l1wc9086qYPETweKjGpWpqHPJp
02-08 18:27:58.807 4224-4224/? I/System.out: te+lNNWb2i4pavbo1d3GvVjflnaK6a23stnr53vp2Pz1mtfifog8zyFe3wDud3ViBu5wpAzgAn0z
02-08 18:27:58.807 4224-4224/? I/System.out: 3JotfHXimxdm1K0ugmxX3QhmUqCw3cnp3+pPOOv6BTeALXUwTJMojwQIypIwGYf3eOo6eg6daxJv
02-08 18:27:58.807 4224-4224/? I/System.out: hJpAnu4pVtpIv7N3xoYeV4kI5KdvqeO+ea76WOy7EwcsVQ5oLlaspfE21e1m1p083re7c1MbVoJP
02-08 18:27:58.807 4224-4224/? I/System.out: nbUmo6X7J317JJr5a3WvyPpPxdsHjhllluFbLIyyxdCpx2/U5P1Jro9P+KGjyyXDy3qpgEoGwAck
02-08 18:27:58.807 4224-4224/? I/System.out: gE55A6nuenUDiXT/AIW6KYNQMyxuHvHjh2pgx4aUH+EdRg9zwoyAM1zfiH4GaWLZruC+eIEFigaU
02-08 18:27:58.807 4224-4224/? I/System.out: Z5JA4Xpz0z685Oa2h/YVV+zp4dqdRqEXadlOT5U9Y9G427d3Z37MLmlZLnT5lFR3T15Wm9br+b08
02-08 18:27:58.807 4224-4224/? I/System.out: 3ZN9VJ42t7lTJFdRyxEcGNlZv4sHBPBPfr2yM4Nc5d+JrTLOjM5Y7iGIDdWxnDDqOvp6nO4+S3/w
...un frammento della stringa in cui è stata ridotta l'immagine.

Ripasso su come inserire un'immagine in un controllo ImageView

Come caricare immagini in una ImageView?
Mettiamo alcune immagini nelle cartelle delle risorse e ripassiamo.

Ecco, non mi ricordo come si caricano immagini dalle risorse.
public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        imageView.setImageResource(R.drawable.bonazza);
    }
}
Da risorse me lo sono ricordato.
Da bitmap non saprei...

Ecco:
public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.bonazza));
    }
}
Anche questa è ripassata.