Autore Topic: Scattare una foto ed inviarla in upload  (Letto 390 volte)

Offline ccmex

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
Scattare una foto ed inviarla in upload
« il: 26 Settembre 2014, 10:50:40 CEST »
0
Ciao a tutti, spero in un suggerimento.

Ho creato una app in Android che consente di inviare tramite upload delle immagini su un server remoto tramite un webservice ed il metodo ksoap2.

Queste immagini possono essere inviate al server remoto sia selezionando una foto esistente nella galleria del proprio smartphone che scattando tramite la app una nuova foto.

Tutto funziona correttamente se si seleziona una foto esistente nella galleria del proprio smartphone, mentre quando si scatta una foto, l'upload del nome della foto sul server avviene correttamente, ma la foto è vuota (zero kilobytes).

La cosa mi sembra strana perchè in entrambi i casi sopraindicati la funzione che richiamo per l'upload è la stessa e si chiama UploadImage ed ancora più strano che sul LogCat di Eclipse non viene visualizzato alcun errore.

Da cosa può dipendere? Allego codice in uso.
Grazie.

Codice: [Seleziona]
                        new Thread(new Runnable() {
                                public void run() {
                                        try {

                                                UploadImage(
                                                                imagepath,
                                                                lStr.substring(lStr.lastIndexOf("/")).replace(
                                                                                "/", ""));

                                                Log.e(TAG, imagepath);


                                        } catch (Exception e) {
                                                e.printStackTrace();
                                                Log.e(TAG, "Error...", e);
                                        }
                                }
                        }).start();


        public static byte[] streamToBytes(InputStream is) {
                ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
                byte[] buffer = new byte[1024];
                int len;
                try {
                        while ((len = is.read(buffer)) >= 0) {
                                os.write(buffer, 0, len);
                        }
                } catch (java.io.IOException e) {
                }
                return os.toByteArray();
        }

        public void UploadImage(String image, String imageName) {

                String lStr = imagepath;

                File mFile = new File(imagepath);
                Log.d(TAG, "mFile: " + mFile);

                SoapObject Request = new SoapObject(WSDL_TARGET_NAMESPACE,
                                OPERATION_NAME);

                byte[] bytearray = null;

                try {
                        FileInputStream is = new FileInputStream(mFile);
                        if (mFile != null)
                                try {
                                        bytearray = streamToBytes(is);
                                } finally {
                                        is.close();
                                }
                } catch (Exception e) {
                }

                Request.addProperty("docbinaryarray", bytearray);


                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                                SoapEnvelope.VER11);

                new MarshalBase64().register(envelope);
                envelope.dotNet = true;
                envelope.encodingStyle = "UTF-8";
                envelope.setOutputSoapObject(Request);

                HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS);
                androidHttpTransport.debug = true;

                try {

                        androidHttpTransport.call(SOAP_ACTION, envelope);

                        SoapPrimitive resultString = (SoapPrimitive) envelope.getResponse();
                        Log.d(TAG, "Output from webservice: " + resultString);

                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                if (requestCode == 1 && resultCode == RESULT_OK) {

                        File f = new File(Environment.getExternalStorageDirectory()
                                        .toString());
                        for (File temp : f.listFiles()) {
                                if (temp.getName().equals("temp.jpg")) {
                                        f = temp;
                                        break;
                                }
                        }

                        try {
                                BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
                                bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
                                                bitmapOptions);
                                imageview.setImageBitmap(bitmap);

                                file = new File(
                                                android.os.Environment.getExternalStorageDirectory()
                                                                + File.separator + "Phoenix" + File.separator
                                                                + "default", String.valueOf(System
                                                                .currentTimeMillis()) + ".jpg");

                                imagepath = android.os.Environment
                                                .getExternalStorageDirectory()
                                                + File.separator
                                                + "Phoenix"
                                                + File.separator
                                                + "default"
                                                + File.separator + file;

                                Log.d(TAG, "outFile:" + imagepath);

                        } catch (Exception e) {
                                e.printStackTrace();
                        }

                } else if (requestCode == 2 && resultCode == RESULT_OK) {
                        Uri selectedImageUri = data.getData();
                        imagepath = getPath(selectedImageUri);
                        Bitmap bitmap = BitmapFactory.decodeFile(imagepath);
                        imageview.setImageBitmap(bitmap);
                        Log.d("HomeActivity.class", "Uploading file path:" + imagepath);
                }
        }

Post unito: [time]26 Settembre 2014, 11:24:59 CEST[/time]
Forse ho capito il problema... il percorso da cui prendere la foto scattata dallo smartphone è sbagliato ...
Questo è il LogCat:
Codice: [Seleziona]
09-26 11:21:50.205:
D/MainActivity.class(25880):
file:/storage/emulated/0/1411723310212.jpg


09-26 11:21:50.205:
D/MainActivity.class(25880):
outFile:/storage/emulated/0//storage/emulated/0/1411723310212.jpg

In outFile il percorso dell'immagine è sbagliato, mentre in file è corretto.
La parte di codice è questa, come risolvo questa anomalia?
Forse devo trasformare la variabile file in stringa ?
Grazie
Codice: [Seleziona]
                                file = new File(
                                                android.os.Environment.getExternalStorageDirectory()
                                                                + File.separator, String.valueOf(System
                                                                .currentTimeMillis()) + ".jpg");                               

                                imagepath = android.os.Environment
                                                .getExternalStorageDirectory()
                                                + File.separator + file;                               
                               
                                Log.d("MainActivity.class", "file:" + file);
                                Log.d("MainActivity.class", "outFile:" + imagepath);

Post unito: 26 Settembre 2014, 11:29:01 CEST
Ho corretto il percorso del'immagine scattata con lo SPhone ma sul server è sempre vuota.  :-(
« Ultima modifica: 26 Settembre 2014, 11:29:01 CEST da ccmex, Reason: Merged DoublePost »

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Scattare una foto ed inviarla in upload
« Risposta #1 il: 28 Settembre 2014, 12:12:35 CEST »
0
Cosí al volo non ti saprei dire, ma che nel logcat non hai eccezioni, puó dipendere dal fatto che non le gestisci :)

Codice (Java): [Seleziona]
 
} catch (java.io.IOException e) {
}

Offline ccmex

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
Re:Scattare una foto ed inviarla in upload
« Risposta #2 il: 28 Settembre 2014, 12:23:45 CEST »
0
Infatti, hai ragione.
Gestendo l'eccezione ho capito il problema, sempre legato al percorso dell'immagine da inviare in upload, ed ho risolto!
Grazie mille.