Autore Topic: Creare cartella e inserire immagini  (Letto 1073 volte)

Offline xixietto

Creare cartella e inserire immagini
« il: 04 Febbraio 2016, 07:41:52 CET »
0
Salve, vorrei nella mia app la possibilità di inserire delle immagini prese dalla galleria. Una volta presa un immagine , l app dovrebbe fare una copia in una cartella e salvarmi il link su un DB SQLite. In modo che se l utente cancellasse l immagine in galleria ho sempre l'immagine pronta. Sapete come fare?

Inviato dal mio GT-I9505 utilizzando Tapatalk


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 583
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Creare cartella e inserire immagini
« Risposta #1 il: 04 Febbraio 2016, 12:11:19 CET »
0

Prova così:

Codice (Java): [Seleziona]
        private static final int PICK_IMAGE = 12345; //Può essere un numero qualsiasi
        private static final String PICTURE_FOLDER = "picDir"; //La cartella privata dove salvare

        //Richiedo al SO la selezione di un'immagine dalla galleria
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(
                        Intent.createChooser(intent, getResources().getString(R.string.lblNewIconPicker)),
                        PICK_IMAGE);

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
               
                if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null) {
                       
                        //Definisco il percorso del nuovo file da salvare
                        File destFile = New File(
                                        context.getDir(PICTURE_FOLDER, Context.MODE_PRIVATE),
                                        "nomeImmagine.jpg" //Questo dovrà cambiare di volta in volta
                                );
                        if (importImage(this, data.getData(), destFile)) {
                                //Immagine importata correttamente
                                String percorso = destFile.getAbsolutePath();
                                salvaPercorsoSuDB(percorso);
                        } else {
                                //Impossibile importare l'immagine
                                Toast.makeText(this, "Impossibile importare l'immagine", Toast.LENGTH_LONG).show();
                        }
                }
        }
       
        protected static boolean importImage(Context ctx, Uri rawUri, File destFile) {
                InputStream fis;
                OutputStream fos;
                int byteCount;
                byte[] buffer = new byte[2048];
                boolean imported = false;
               
                try {
                        fis = ctx.getContentResolver().openInputStream(rawUri);
                        try {
                                fos = new FileOutputStream(destFile);
                                try {
                                        while ((byteCount = fis.read(buffer)) > 0) {
                                                fos.write(buffer, 0, byteCount);
                                        }
                                        imported = true;
                                } finally {
                                        fos.close();
                                }
                        } finally {
                                fis.close();
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
               
                return imported;
        }

P.S.: Il codice contiene sicuramente degli errori che mi sono sfuggiti, ma il principio è quello.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Creare cartella e inserire immagini
« Risposta #2 il: 11 Febbraio 2016, 11:43:45 CET »
0
Cioè nel layout cosa devo inserire? Mi potresti spiegare BN il codice ?
In pratica cliccando su un bottone dovrebbe aprirsi la galleria x selezionare la foto.. E poi inserirla nel layout e salvarla in una cartella x

Inviato dal mio GT-I9505 utilizzando Tapatalk


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 583
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Creare cartella e inserire immagini
« Risposta #3 il: 11 Febbraio 2016, 12:10:54 CET »
0

Il codice che ho postato gestisce la selezione di un'immagine da galleria ed il suo salvataggio in locale. Puoi mettere la prima parte all'interno di un OnClickListener.

Il resto (onActivityResult) deve ovviamente essere definito in un'Activity.

Per caricare l'immagine puoi fare:

Codice (Java): [Seleziona]
String percorso = caricaPercorsoDaDB();
Drawable drw = Drawable.createFromPath(percorso);

a quel punto puoi usare il Drawable come ti pare, es.:

Codice (Java): [Seleziona]
ImageView img = findViewById(R.id.tua_image_view);
img.setImageDrawable(drw);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Creare cartella e inserire immagini
« Risposta #4 il: 11 Febbraio 2016, 12:11:48 CET »
0
Appena tornò a casa provo.. Grazie :)

Inviato dal mio GT-I9505 utilizzando Tapatalk


Offline xixietto

Re:Creare cartella e inserire immagini
« Risposta #5 il: 12 Febbraio 2016, 15:22:19 CET »
0
mi trovo in questa situzione:
nel layout ho inserito un bottone e una imageview
cioè al click del bottone dovrei andare in galleria a scegliere un immagine
 
Codice (Java): [Seleziona]
//prendere valore edittext con bottone
        aggiungi_elemento.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                //Richiedo al SO la selezione di un'immagine dalla galleria
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivityForResult(
                        Intent.createChooser(intent, getResources().getString(R.string.lblNewIconPicker)),
                        PICK_IMAGE);
            }});

}
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null) {

            //Definisco il percorso del nuovo file da salvare
            File destFile = New File(
                    context.getDir(PICTURE_FOLDER, Context.MODE_PRIVATE),
                    "nomeImmagine.jpg" //Questo dovrà cambiare di volta in volta
            );
            if (importImage(this, data.getData(), destFile)) {
                //Immagine importata correttamente
                String percorso = destFile.getAbsolutePath();
                salvaPercorsoSuDB(percorso);
            } else {
                //Impossibile importare l'immagine
                Toast.makeText(this, "Impossibile importare l'immagine", Toast.LENGTH_LONG).show();
            }
        }
    }

    private void salvaPercorsoSuDB(String percorso) {
    }

    protected static boolean importImage(Context ctx, Uri rawUri, File destFile) {
        InputStream fis;
        OutputStream fos;
        int byteCount;
        byte[] buffer = new byte[2048];
        boolean imported = false;

        try {
            fis = ctx.getContentResolver().openInputStream(rawUri);
            try {
                fos = new FileOutputStream(destFile);
                try {
                    while ((byteCount = fis.read(buffer)) > 0) {
                        fos.write(buffer, 0, byteCount);
                    }
                    imported = true;
                } finally {
                    fos.close();
                }
            } finally {
                fis.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return imported;
    }
cosa intendi per lblNewIconPicker?
ottengo un pò di rosso  :-X
Codice (Java): [Seleziona]
    //Definisco il percorso del nuovo file da salvare
            File destFile = New File(
                    context.getDir(PICTURE_FOLDER, Context.MODE_PRIVATE),
                    "nomeImmagine.jpg" //Questo dovrà cambiare di volta in volta
            );
una volta presa l'immagine dovrei caricarla nella imageview, salvare l'immagine in una cartella x
e quindi inserire il nome dell'immagine del db giusto?
« Ultima modifica: 12 Febbraio 2016, 16:22:07 CET da xixietto »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 583
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Creare cartella e inserire immagini
« Risposta #6 il: 12 Febbraio 2016, 23:13:47 CET »
0

Il codice che ho postato già si occupa di creare una copia dell'immagine nella memoria privata riservata all'app.

Il metodo "salvaPercorsoSuDB" dovrebbe occuparsi (indovina?) di salvare il percorso dell'immagine su db (che è nel parametro "percorso").

Ottieni dei rossi perché il codice che ho postato non è completo - ti sto solo indicando i passi per caricare le immagini dalla galleria.

Se vuoi vedere l'immagine dopo l'importazione, dopo

Codice (Java): [Seleziona]
salvaPercorsoSuDB(percorso);
metti le due righe di codice che ho postato per caricare l'immagine.

Ricorda che devi implementare le funzioni "salvaPercorsoSuDB" e "caricaPercorsoDaDB" in modo che salvino e carichino rispettivamente il percorso dell'immagine su e da DB, altrimenti non funziona nulla.

Per fare dei test puoi mettere:

Codice (Java): [Seleziona]
String glbPercorso;

private void salvaPercorsoSuDB(String percorso) {
    glbPercorso = percorso;
}

private String caricaPercorsoDaDB() {
    return glbPercorso;
}

"lblNewIconPicker" è un refuso. Sostituisci

Codice (Java): [Seleziona]
getResources().getString(R.string.lblNewIconPicker))
con

Codice (Java): [Seleziona]
"Scegli immagine"
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Creare cartella e inserire immagini
« Risposta #7 il: 20 Febbraio 2016, 16:47:26 CET »
0
scusate.. ma forse questa parte di codice contiene errori
Codice (Java): [Seleziona]
  if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null) {
         
           
            //Definisco il percorso del nuovo file da salvare
            File destFile = New File(context.getDir(PICTURE_FOLDER, Context.MODE_PRIVATE),
                    "nomeImmagine.jpg" //Questo dovrà cambiare di volta in volta
            );

il context diventa rosso
« Ultima modifica: 21 Febbraio 2016, 12:34:12 CET da xixietto »

Offline xixietto

Re:Creare cartella e inserire immagini
« Risposta #8 il: 11 Maggio 2016, 19:32:01 CEST »
0
sapete aiutarmi
Codice: [Seleziona]
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDir(java.lang.String, int)' on a null object reference
Codice (Java): [Seleziona]
 private static final int PICK_IMAGE = 1; //Può essere un numero qualsiasi
    private static final String PICTURE_FOLDER = Environment.getExternalStorageDirectory().getPath() + "/Macelleria"; //La cartella privata dove salvare
Codice (Java): [Seleziona]
 // prendere valore edittext con bottone
        aggiungi_elemento.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                //Richiedo al SO la selezione di un'immagine dalla galleria
                Intent intent = new Intent();
             //   intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.setAction(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent,1);
               // Intent intentOpenImage = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
               // startActivityForResult(intentOpenImage, GALLERY_PICTURE);
            }
        });

Codice (Java): [Seleziona]
 @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null) {

              //  File destFile  = new File(Environment.getExternalStorageDirectory().getPath() + "/Macelleria");
             //   if (!destFile .exists())
                //    destFile .mkdirs();
                File destFile = new File(context.getDir(PICTURE_FOLDER, Context.MODE_PRIVATE),
                        "nomeImmagine.jpg" //Questo dovrà cambiare di volta in volta
                );
                if (importImage(this, data.getData(), destFile)) {
                    String percorso = destFile.getAbsolutePath();

                }


                Uri immagine_presa = data.getData(); //url immagine presa

                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Log.d("1?", String.valueOf(immagine_presa) + " " + filePathColumn);//calcolo posizione riguardo la gridview
                File sd = new File(Environment.getExternalStorageDirectory().getPath() + "/Macelleria");
            } }


    private boolean importImage(Context ctx ,Uri rawUri, File destFile) {
        InputStream fis;
        OutputStream fos;
        int byteCount;
        byte[] buffer = new byte[2048];
        boolean imported = false;

        try {
            fis = ctx.getContentResolver().openInputStream(rawUri);
            try {
                fos = new FileOutputStream(destFile);
                try {
                    while ((byteCount = fis.read(buffer)) > 0) {
                        fos.write(buffer, 0, byteCount);
                    }
                    imported = true;
                } finally {
                    fos.close();
                }
            } finally {
                fis.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return imported;
    }
            }

Offline xixietto

Re:Creare cartella e inserire immagini
« Risposta #9 il: 08 Agosto 2016, 14:51:40 CEST »
0
salve, perchè l'imageview non visualizza foto piu grandi di 1 mb?