Autore Topic: ERRORE Passaggio foto tra Intent.  (Letto 2414 volte)

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
ERRORE Passaggio foto tra Intent.
« il: 17 Aprile 2012, 11:09:33 CEST »
0
Ciao a tutti, ho un problema quando passo una foto tra 2 intent.
Ho creato un interfaccio dove l'utente può selezionare la foto o dalla "gallery" oppure dalla "scheda sd". Una volta selezionata la foto si dovrebbe avviare una nuova Intent, ma questo non avviene.

Sto usando diversi modi, ma tutti crashano, alcuni danno il famoso errore "FAILED BINDER TRANSACTION" !!!
Qualcuno di voi ha già risolto o avuto il mio stesso problema\errore ??

Vi posto il codice delle due activity....una volta risolto può sempre tornare utile a tutti è un'interfaccia davvero interessante per lavorare con le foto.
GRAZIE IN ANTICIPO A TUTTI

Codice (Java): [Seleziona]
package com.lucapinta.cameraTest1;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainTest1 extends Activity implements OnClickListener {

        ImageView chosenImageView;
        Button choosePicture;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                choosePicture = (Button) this.findViewById(R.id.button1);
                choosePicture.setOnClickListener(this);
        }

        //pushButton Method -> Create a GUI for selected photo.
        public void onClick(View v) {
                Intent choosePictureIntent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(choosePictureIntent, 0);
        }

        protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
                super.onActivityResult(requestCode, resultCode, intent);

                if (resultCode == RESULT_OK) {
                        Uri imageFileUri = intent.getData();


                        try {
        Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, null);

//**************** TEST 4 ***********************************************************

                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
                byte[] b = baos.toByteArray();
               
                Intent intent2 = new Intent(this, ReceiverActivity.class);
                intent.putExtra("picture", b);
                startActivity(intent2);

                        } catch (FileNotFoundException e) {
                                Log.v("ERROR", e.toString());
                        }
                }
        }
} //end class

RECEIVER
Codice (Java): [Seleziona]
package com.lucapinta.cameraTest1;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

public class ReceiverActivity extends Activity {
       
       

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.receiver);
   
        Bundle extras = getIntent().getExtras();
        byte[] b = extras.getByteArray("picture");

        Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
        ImageView image = (ImageView) findViewById(R.id.imagea);

        image.setImageBitmap(bmp);

       
        } //end OnCreate

} //end Class

Il passaggio di immagini con Intent dovrebbe avvenire in 165ms, mentre a me l'imagine non carica dopo qualche secondo va crash

Vi posso postare anche gli altri codici che sto provando a far funzionare.

Grazie a tutti.
Luca

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:ERRORE Passaggio foto tra Intent.
« Risposta #1 il: 17 Aprile 2012, 11:41:16 CEST »
0
Nel receiver non
Codice (Java): [Seleziona]
Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("picture");

ma

Codice (Java): [Seleziona]
byte[] b =  getIntent().getByteArray("picture");
Odio l'inglese e per un informatico non è il massimo

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ERRORE Passaggio foto tra Intent.
« Risposta #2 il: 17 Aprile 2012, 11:45:59 CEST »
0
Io se fossi in te eviterei di passare la bitmap nell'intent ma, visto che già ce l'hai, passerei direttamente l'uri.
In questo modo eviteresti di dover creare il ByteArrayOutputStream e di ricreare la bitmap, risparmieresti un bel po' di risorse.

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #3 il: 17 Aprile 2012, 18:14:13 CEST »
0
@pivoide: Grazie, ho provato ma mi da errore!!!
Codice (Java): [Seleziona]
byte[] b =  getIntent().getByteArray("picture");

@Ricky credo di averci provato pure, ci sarà qualcosa che sbaglio ma non capisco dove!!
A limite mi potresti scrivere il codice se lo sai così lo provo??

Grazie a tutti
Luca

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:ERRORE Passaggio foto tra Intent.
« Risposta #4 il: 17 Aprile 2012, 23:22:55 CEST »
0
Nel tuo codice metti l'array in una variabile intent e richiami intent2
Odio l'inglese e per un informatico non è il massimo

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #5 il: 18 Aprile 2012, 10:48:11 CEST »
0
Lato SENDER
Codice (Java): [Seleziona]
Uri imageFileUri = intentPhoto.getData();

                try {
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, null);

       ByteArrayOutputStream baos = new ByteArrayOutputStream();
               byte[] b = baos.toByteArray();
       
        Intent intent2 = new Intent(this, SecondActivity.class);
        intent2.putExtra("picture", b);
        startActivity(intent2);
       
                        } catch (FileNotFoundException e) {
                                Log.v("ERROR", e.toString());
                        } //end catch


Lato RECEIVER
Codice (Java): [Seleziona]
byte[] b =  getIntent().getByteArrayExtra("picture");
  Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
  ImageView image = (ImageView) findViewById(R.id.ivPicture);
  image.setImageBitmap(bmp);


Ma mi spunta la seconda intent vuota, vuol dire che sbaglio a passare i dati!!!

Facendo altri tentativi, ho notato che nella maggior parte dei casi mi viene fuori l'errore "FAILED BINDER TRANSACTION"!

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:ERRORE Passaggio foto tra Intent.
« Risposta #6 il: 18 Aprile 2012, 15:11:44 CEST »
0
Nell'ultimo sender ti sei 'magnato' una riga durante i tentativi:

Codice (Java): [Seleziona]
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
Odio l'inglese e per un informatico non è il massimo

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #7 il: 18 Aprile 2012, 16:09:28 CEST »
0
Grazie ho provato, scusami della svista  O:-),  in effetti l'intent vuota era dovuta al fatto che non passovo nulla o meglio l'array vuoto,  ma purtroppo nulla da fare inserendo ciò che mi hai segnalato mi da l'errore "FAILED BINDER TRANSACTION", può essere che non si può passare c'è un limite di dati da inserire??? consuma troppa memoria?
A limite posso o provare a passare l'URI cosa ne pensi? solo che non l'URI non ho capito come si passa!!!  :-(
Riporto il LOG
Codice: [Seleziona]
04-18 16:02:58.367: D/dalvikvm(26278): GC_FOR_ALLOC freed 71K, 2% free 9162K/9347K, paused 34ms
04-18 16:02:58.464: I/dalvikvm-heap(26278): Grow heap (frag case) to 27.732MB for 19660816-byte allocation
04-18 16:02:58.504: D/dalvikvm(26278): GC_CONCURRENT freed 1K, 1% free 28361K/28615K, paused 2ms+4ms
04-18 16:03:00.886: D/dalvikvm(26278): GC_FOR_ALLOC freed 489K, 3% free 28839K/29511K, paused 21ms
04-18 16:03:02.695: D/dalvikvm(26278): GC_FOR_ALLOC freed 505K, 4% free 29351K/30535K, paused 19ms
04-18 16:03:02.699: I/dalvikvm-heap(26278): Grow heap (frag case) to 30.693MB for 2092136-byte allocation
04-18 16:03:02.750: D/dalvikvm(26278): GC_CONCURRENT freed 1017K, 7% free 30377K/32583K, paused 2ms+6ms
04-18 16:03:05.679: D/dalvikvm(26278): GC_FOR_ALLOC freed 0K, 7% free 30377K/32583K, paused 20ms
04-18 16:03:05.691: I/dalvikvm-heap(26278): Grow heap (frag case) to 33.697MB for 4192360-byte allocation
04-18 16:03:05.742: D/dalvikvm(26278): GC_CONCURRENT freed 2043K, 12% free 32428K/36679K, paused 2ms+5ms
04-18 16:03:09.605: D/dalvikvm(26278): GC_FOR_ALLOC freed 0K, 12% free 32428K/36679K, paused 21ms
04-18 16:03:09.636: I/dalvikvm-heap(26278): Grow heap (frag case) to 39.706MB for 8392808-byte allocation
04-18 16:03:09.703: D/dalvikvm(26278): GC_CONCURRENT freed 4094K, 19% free 36530K/44935K, paused 1ms+9ms
04-18 16:03:14.660: D/dalvikvm(26278): GC_FOR_ALLOC freed 4K, 19% free 36526K/44935K, paused 22ms
04-18 16:03:14.679: I/dalvikvm-heap(26278): Grow heap (frag case) to 41.987MB for 6588664-byte allocation
04-18 16:03:14.734: D/dalvikvm(26278): GC_CONCURRENT freed 0K, 5% free 42960K/44935K, paused 2ms+3ms
04-18 16:03:14.808: E/JavaBinder(26278): !!! FAILED BINDER TRANSACTION !!!

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #8 il: 18 Aprile 2012, 16:23:19 CEST »
0
Cambiando modo ottendo sempre lo stesso Errore.
codice Sender -
Codice (Java): [Seleziona]
try {
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, null);
                Intent intent = new Intent(MainTest1.this, Test1.class);                       
                                                Bundle bundle = new Bundle();
                                                bundle.putParcelable("BITMAP_A", bmp);
                                                intent.putExtras(bundle);
                                                startActivity(intent);
} catch (FileNotFoundException e) {
                                                                Log.v("ERROR", e.toString());
                                                        } //end catch

Receiver2
Codice (Java): [Seleziona]
imageA = (ImageView)findViewById(R.id.imagea);

            Bundle bundle = this.getIntent().getExtras();
            Bitmap bmA = bundle.getParcelable("BITMAP_A");

            imageA.setImageBitmap(bmA);

Log
Codice (Java): [Seleziona]
04-18 16:19:20.519: D/dalvikvm(26522): GC_FOR_ALLOC freed 73K, 2% free 9162K/9347K, paused 17ms
04-18 16:19:20.523: I/dalvikvm-heap(26522): Grow heap (frag case) to 10.447MB for 1536016-byte allocation
04-18 16:19:20.562: D/dalvikvm(26522): GC_CONCURRENT freed 1K, 3% free 10661K/10887K, paused 2ms+2ms
04-18 16:19:20.601: E/JavaBinder(26522): !!! FAILED BINDER TRANSACTION !!!

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:ERRORE Passaggio foto tra Intent.
« Risposta #9 il: 19 Aprile 2012, 09:43:17 CEST »
0
Verifica la grandezza della bitmap. Mi pare che i vettori passati debbano essere sotto i 40k (il numero potrebbe essere diverso ma dovrebbe comunque esistere un limite). A me  il codice funzionava con un'immagine di 29k.
Odio l'inglese e per un informatico non è il massimo

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #10 il: 10 Maggio 2012, 17:08:48 CEST »
0
Ciao grazie delle risposte, si con le Bitmap le riuscivo a passare pure io, dato che sono di piccole sia in termini di dimensioni (altezza x larghezza) che Mega, non ci sono problemi. Mentre per le immagini sia acquisite da camera che quelle importate da file generano casini.

Cmq credo di aver risolto o meglio ci sto lavorando vi faccio sapere se funziona.

Grazie ancora
Luca

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:ERRORE Passaggio foto tra Intent.
« Risposta #11 il: 11 Maggio 2012, 14:02:00 CEST »
0
sto lavorando a un progetto che piu o meno deve fare la stessa cosa..e ho trovato alcuni problemi che magari possono darti una mano:
ho notato che utilizzando le bitmap in alcuni terminali crea problemi di memoria insufficente e quindi android non riuscendo a creare la bitmap passa un valore nullo..(anche il tuo potrebbe essere un problema di questo tipo).
in piu ho visto che in alcuni dispositivi come per esempio il galaxy s e dal quel che ho letto in rete anche il galaxy tab, in molte situazioni l'intent per scattare foto ritorna un valore data = null (probabilmente un bug di questi terminali).
il problema lo ho risolto utilizzando l'intent per la camera in modo che salvi la foto nella sd a un uri prestabilito, in questo modo da qualsiasi activity posso prendere e manipolare la foto (essendo un uri prestabilito).
ma anche qua mi sono sorti dei problemi con il galaxy s..che a volte si "dimentica" l'url che ho impostato nell'uri (la cosa strana è che mi succede solo nel galaxy s) quindi per risolvere anche questo problema ogni volta che devo utilizzare questo uri, lo ridichiaro prima di utilizzarlo.

sembra una cosa assurda, ma dopo migliaia di test e tentativi ho notato che ogni terminale ha delle piccole differenze che creano veramente grossi problemi nella gestione delle immagini :(

forse le cose che ti ho detto non hanno nulla a che fare con i tuoi problemi, ma potrebbero indirizzarti sulla via giusta..
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #12 il: 29 Maggio 2012, 16:39:42 CEST »
0
Grazie Freccia, io sono riuscito passando l'image come string array e poi la decodifico, devo dire che fino ad ora non ho trovato una soluzione migliore di questa.
Quella ideale sarebbe passare l'URL per essere ancora più veloce ma credo che bisogna accontentarsi :D :D
grazie ancora Luca

Offline ghiro90

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Next Turbo
  • Sistema operativo:
    Mac OS X
Re:ERRORE Passaggio foto tra Intent.
« Risposta #13 il: 06 Giugno 2012, 15:51:43 CEST »
0
Grazie Freccia, io sono riuscito passando l'image come string array e poi la decodifico, devo dire che fino ad ora non ho trovato una soluzione migliore di questa.
Quella ideale sarebbe passare l'URL per essere ancora più veloce ma credo che bisogna accontentarsi :D :D
grazie ancora Luca

Ciao LucaP84, potresti postare il codice per codificare l'immagine e poi per trasferirla? Grazie ciaooo :-) :-)

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:ERRORE Passaggio foto tra Intent.
« Risposta #14 il: 16 Giugno 2012, 18:48:58 CEST »
0
Ciao, ho pubblicato un tutorial contenente il progetto eclipse su come leggere il file dalla gallery e mostrarlo in un altra activity.
Fammi sapere se ti è utile.
a presto
Luca