Autore Topic: Aggiornamento:problemi per onactivityresult dopo un intent per usare la camera.  (Letto 1480 volte)

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
ciao ragazzi.
Ho un appplicazione che su un samsung s2 (and 2.3.5)funziona perfettamente,ma che mi sta facendo impazzire su un samsung note (and. 2.3.6).
tutto funziona bene tranne quando lancio una intent come da link:
 http://developer.android.com/guide/topics/media/camera.html
il problema e questo :
io ho due botoni per fare due foto che usando la stessa void:
Codice (Java): [Seleziona]
    public void ButtonFotoClick(View view) {
        if ( elemento!=null){
                // create Intent to take a picture and return control to the calling application
            idbottone=view.getId();
            intentfoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
            intentfoto.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
              // start the image capture Intent
            startActivityForResult(intentfoto, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
        }else{
                 Toast.makeText(this, "devi selezionare un elemneto", Toast.LENGTH_LONG).show();
        }
       
    }

la camera parte , ma quando vado sul metodo onactivityresult(..)

non riesco a prendere la variabile "idbottone",almeno non sempre,perché il codice mi restituisce un errore :
Codice: [Seleziona]
02-17 09:13:49.335: E/AndroidRuntime(17409): java.lang.RuntimeException: Unable to resume activity
 {gprev.android/gprev.android.InsertDates}: java.lang.RuntimeException:
Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity
{gprev.android/gprev.android.InsertDates}: java.lang.NullPointerException

facendo prove ho visto, che praticamente quando torno all'activiti che ha chiamato la camera é come se si azzerassero tutte le variabili e quindi l'errore.Ho provato a usrae lo stesso fileUri che metto nello startactivityforresult, ma il riusultato non cambia.

IO ho solo bisogno che nel metodo onactivityresult possa distinguere quale bottone ho premuto.

la activityresult é:
Codice (Java): [Seleziona]
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode ==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
   //           Toast.makeText(this, String.valueOf(numerofoto), Toast.LENGTH_LONG).show();
         if (resultCode == RESULT_OK) {    
                 removeImage(getLastImageId());//rimuove la foto dalla galleria
          if (idbottone==R.id.buttonfoto1){
                  layoutfoto2.setVisibility(LinearLayout.VISIBLE);
                  BottonevalidaDati.setVisibility(Button.VISIBLE);
          foto1fatta=true;
                  cambiastatofoto(R.id.prossof1 ,R.id.pverdef1);
                  nomefoto1=fileUri.getLastPathSegment();
               
          } else  if (idbottone==R.id.buttonfoto2) {
                         nomefoto2=fileUri.getLastPathSegment();    
                         cambiastatofoto(R.id.prossof2 ,R.id.pverdef2);
                        //removeImage(getLastImageId());//rimuove la foto dalla galleria
          }
         } else if (resultCode == RESULT_CANCELED) {
                layoutfoto2.setVisibility(LinearLayout.INVISIBLE);
                 Toast.makeText(this, msg1.toString(), Toast.LENGTH_LONG).show();
         } else {
                Toast.makeText(this, msg2.toString(), Toast.LENGTH_LONG).show();
         }
         
        }

     }
se tolgo tutto il codice dell'if (idbottone==....){} no ho nessun errore.
lo stesso codice sul samsung s2 non da problemi.
potete aiutarmi?
« Ultima modifica: 18 Febbraio 2012, 10:46:20 CET da fieraf »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #1 il: 16 Febbraio 2012, 10:14:35 CET »
0
A che riga avviene di preciso la NullPointerException?

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #2 il: 16 Febbraio 2012, 10:25:09 CET »
0
dove lo vedo il numero di linea?
grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #3 il: 16 Febbraio 2012, 10:35:11 CET »
0
Nello stacktrace intero dell'eccezione.

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #4 il: 16 Febbraio 2012, 10:43:23 CET »
0
scusa l'ignoranza,sono nuovo di android, ho postato quello que mi dice la finestra del logCat.
ho provato a salvarlo, ma mi da un file vuoto
come devo fare?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #5 il: 16 Febbraio 2012, 10:46:37 CET »
0
Seleziona le varie righe nel logcat e incollale qui :)

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #6 il: 16 Febbraio 2012, 10:55:16 CET »
0
ecco il logcat:

Codice: [Seleziona]
02-17 10:53:02.365: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.InsertDates
02-17 10:53:02.370: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.InsertDates
02-17 10:53:04.150: D/InputTransport(22203): Input channel constructed: name='40958c20 Toast (client)', ashmemFd=62, receivePipeFd=63, sendPipeFd=64
02-17 10:53:04.450: I/ViewRoot(22203): !@FINISH DRAWING : Toast
02-17 10:53:04.455: I/ViewRoot(22203): !@finishDrawing is completed : Toast
02-17 10:53:04.560: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.MappActivity
02-17 10:53:04.570: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.MappActivity
02-17 10:53:04.570: I/MapActivity(22203): Handling network change notification:CONNECTED
02-17 10:53:04.740: D/InputTransport(22203): Input channel destroyed: name='40bce390 gprev.android/gprev.android.InsertDates (client)', ashmemFd=58, receivePipeFd=82, sendPipeFd=83
02-17 10:53:05.695: D/dalvikvm(22203): GC_EXTERNAL_ALLOC freed 333K, 43% free 3862K/6727K, external 3874K/3893K, paused 42ms
02-17 10:53:05.730: D/skia(22203): ---- fAsset->read(3390) returned 0
02-17 10:53:05.735: D/skia(22203): ---- fAsset->read(3386) returned 0
02-17 10:53:05.765: D/InputTransport(22203): Input channel constructed: name='4096f248 gprev.android/gprev.android.InsertDates (client)', ashmemFd=58, receivePipeFd=82, sendPipeFd=83
02-17 10:53:05.975: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.InsertDates
02-17 10:53:05.985: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.InsertDates
02-17 10:53:06.850: I/ViewRoot(22203): !@FINISH DRAWING : Toast
02-17 10:53:06.870: I/ViewRoot(22203): !@finishDrawing is completed : Toast
02-17 10:53:06.975: D/CLIPBOARD(22203): Hide Clipboard dialog at Starting input: finished by someone else... !
02-17 10:53:06.975: W/IInputConnectionWrapper(22203): showStatusIcon on inactive InputConnection
02-17 10:53:07.620: D/InputTransport(22203): Input channel destroyed: name='40958c20 Toast (client)', ashmemFd=62, receivePipeFd=63, sendPipeFd=64
02-17 10:53:12.470: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.InsertDates
02-17 10:53:12.470: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.InsertDates
02-17 10:53:13.925: D/CLIPBOARD(22203): Hide Clipboard dialog at Starting input: finished by someone else... !
02-17 10:53:13.930: W/IInputConnectionWrapper(22203): showStatusIcon on inactive InputConnection
02-17 10:53:19.590: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.InsertDates
02-17 10:53:19.595: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.InsertDates
02-17 10:53:20.940: D/InputTransport(22203): Input channel constructed: name='40987420 Toast (client)', ashmemFd=62, receivePipeFd=63, sendPipeFd=64
02-17 10:53:21.030: I/ViewRoot(22203): !@FINISH DRAWING : Toast
02-17 10:53:21.035: I/ViewRoot(22203): !@finishDrawing is completed : Toast
02-17 10:53:21.225: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.MappActivity
02-17 10:53:21.230: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.MappActivity
02-17 10:53:21.230: I/MapActivity(22203): Handling network change notification:CONNECTED
02-17 10:53:21.405: D/InputTransport(22203): Input channel destroyed: name='4096f248 gprev.android/gprev.android.InsertDates (client)', ashmemFd=58, receivePipeFd=82, sendPipeFd=83
02-17 10:53:24.440: D/InputTransport(22203): Input channel destroyed: name='40987420 Toast (client)', ashmemFd=62, receivePipeFd=63, sendPipeFd=64
02-17 10:53:25.595: D/dalvikvm(22203): GC_EXTERNAL_ALLOC freed 438K, 44% free 3859K/6855K, external 4393K/4421K, paused 48ms
02-17 10:53:25.620: D/skia(22203): ---- fAsset->read(3390) returned 0
02-17 10:53:25.620: D/skia(22203): ---- fAsset->read(3386) returned 0
02-17 10:53:25.640: D/InputTransport(22203): Input channel constructed: name='40b7cbf0 gprev.android/gprev.android.InsertDates (client)', ashmemFd=57, receivePipeFd=58, sendPipeFd=62
02-17 10:53:25.740: I/ViewRoot(22203): !@FINISH DRAWING : gprev.android/gprev.android.InsertDates
02-17 10:53:25.745: I/ViewRoot(22203): !@finishDrawing is completed : gprev.android/gprev.android.InsertDates
02-17 10:53:27.165: D/CLIPBOARD(22203): Hide Clipboard dialog at Starting input: finished by someone else... !
02-17 10:53:27.165: W/IInputConnectionWrapper(22203): showStatusIcon on inactive InputConnection
02-17 10:53:32.260: D/InputTransport(22203): Input channel destroyed: name='40b7cbf0 gprev.android/gprev.android.InsertDates (client)', ashmemFd=57, receivePipeFd=58, sendPipeFd=62
02-17 10:53:32.390: D/dalvikvm(22203): GC_EXTERNAL_ALLOC freed 221K, 45% free 3830K/6855K, external 4381K/4388K, paused 24ms
02-17 10:53:32.400: D/skia(22203): ---- fAsset->read(3390) returned 0
02-17 10:53:32.400: D/skia(22203): ---- fAsset->read(3386) returned 0
02-17 10:53:32.510: D/AndroidRuntime(22203): Shutting down VM
02-17 10:53:32.510: W/dalvikvm(22203): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
02-17 10:53:32.515: E/AndroidRuntime(22203): FATAL EXCEPTION: main
02-17 10:53:32.515: E/AndroidRuntime(22203): java.lang.RuntimeException: Unable to resume activity {gprev.android/gprev.android.InsertDates}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {gprev.android/gprev.android.InsertDates}: java.lang.NullPointerException
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2836)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.access$1600(ActivityThread.java:117)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.os.Handler.dispatchMessage(Handler.java:99)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.os.Looper.loop(Looper.java:130)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.main(ActivityThread.java:3691)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at java.lang.reflect.Method.invokeNative(Native Method)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at java.lang.reflect.Method.invoke(Method.java:507)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at dalvik.system.NativeStart.main(Native Method)
02-17 10:53:32.515: E/AndroidRuntime(22203): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {gprev.android/gprev.android.InsertDates}: java.lang.NullPointerException
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2111)
02-17 10:53:32.515: E/AndroidRuntime(22203):         ... 13 more
02-17 10:53:32.515: E/AndroidRuntime(22203): Caused by: java.lang.NullPointerException
02-17 10:53:32.515: E/AndroidRuntime(22203):         at gprev.android.InsertDates.onActivityResult(InsertDates.java:347)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.Activity.dispatchActivityResult(Activity.java:3950)
02-17 10:53:32.515: E/AndroidRuntime(22203):         at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
02-17 10:53:32.515: E/AndroidRuntime(22203):         ... 14 more
02-17 10:53:34.685: I/dalvikvm(22203): threadid=4: reacting to signal 3
02-17 10:53:34.690: I/dalvikvm(22203): Wrote stack traces to '/data/anr/traces.txt'


Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #7 il: 16 Febbraio 2012, 11:00:24 CET »
0
Codice: [Seleziona]
02-17 10:53:32.515: E/AndroidRuntime(22203): Caused by: java.lang.NullPointerException
02-17 10:53:32.515: E/AndroidRuntime(22203):         at gprev.android.InsertDates.onActivityResult(InsertDates.java:347)

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #8 il: 16 Febbraio 2012, 11:04:43 CET »
0
aprenod il file java dell'activity con notepad++, la riga 347 si riferisce a

Codice (Java): [Seleziona]
nomefoto1=fileUri.getLastPathSegment();quindi vuoldire che non ricorda il fileUri dato con startactvityforresult?
come faccio a recuperare questa informazione?
non posso usare la variabile Intent data dichiarata negli argomenti di on activityresult?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #9 il: 16 Febbraio 2012, 11:21:48 CET »
0
In alcuni casi la foto viene scattata ma non viene salvata e quindi non ti viene passato l'uri della foto ma ti viene passata la bitmap.

Dai un occhio qui:

[medio] Come utilizzare la Camera di Android per scattare una foto - Android Developers Italia

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #10 il: 16 Febbraio 2012, 11:45:14 CET »
0
ok. ho mofificato la void cosí:
Codice (Java): [Seleziona]
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult( requestCode, resultCode, data );

        if (requestCode ==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
   //           Toast.makeText(this, String.valueOf(numerofoto), Toast.LENGTH_LONG).show();
         if (resultCode == RESULT_OK) {    
             removeImage(getLastImageId());//rimuove la foto dalla galleria
          if (idbottone==R.id.ButtonFoto1){
                  if (fileUri!=null){
                      layoutfoto2.setVisibility(LinearLayout.VISIBLE);
                      BottonevalidaDati.setVisibility(Button.VISIBLE);
                      foto1fatta=true;
                      cambiastatofoto(R.id.prossof1 ,R.id.pverdef1);
                     nomefoto1=fileUri.getLastPathSegment();
                  }else{
                          Toast.makeText(this, "error fileuri1", Toast.LENGTH_LONG).show();
                          Uri selectedImage = data.getData();
                      //se è null vuol dire che la foto non è stata salvata automaticamente la salviamo manualemente
                      if(selectedImage == null){
                              Bitmap b = ( Bitmap ) data.getExtras().get( "data" );
                              selectedImage = MediaStore.Images.Media.insertImage( getContentResolver(), b, null, null );
                                  Toast.makeText(this, "nomefoto1", Toast.LENGTH_LONG).show();
                      }
                  }
               
          } else  if (idbottone==R.id.ButtonFoto2) {
              if (fileUri!=null){
                  nomefoto2=fileUri.getLastPathSegment();
                  cambiastatofoto(R.id.prossof2 ,R.id.pverdef2);
                 }else
                         {
                         Toast.makeText(this, "error fileuri2", Toast.LENGTH_LONG).show();
                         }
                       
          }else{
                  Toast.makeText(this, "error idbottone", Toast.LENGTH_LONG).show();
          }
           } else if (resultCode == RESULT_CANCELED) {
                layoutfoto2.setVisibility(LinearLayout.INVISIBLE);
                 Toast.makeText(this, msg1.toString(), Toast.LENGTH_LONG).show();
         } else {
                Toast.makeText(this, msg2.toString(), Toast.LENGTH_LONG).show();
         }
         
        }

     }

ma mi dice che non posso convertire una stringa in uri
mi puoi aiutare?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #11 il: 16 Febbraio 2012, 11:50:45 CET »
0
Codice (Java): [Seleziona]
Uri uri = Uri.parse(stringa)

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #12 il: 16 Febbraio 2012, 12:09:29 CET »
0
aiuto ho il cevello fumando :-[ :-[ :-[

data.getdata()
 risulta null

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #13 il: 16 Febbraio 2012, 12:15:45 CET »
0
data.getdata()
 risulta null

Ok e quello è corretto.

Poi
Codice (Java): [Seleziona]
Bitmap b = ( Bitmap ) data.getExtras().get( "data" );
ti ritorna una bitmap?

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:problemi per onactivityresult dopo un intent per usare la camera.
« Risposta #14 il: 16 Febbraio 2012, 12:27:05 CET »
0
ok, prima di tutto,grazie per la pazienza.
per usare il getdata ho tolto
Codice (Java): [Seleziona]
intentfoto.putExtra(MediaStore.EXTRA_OUTPUT,fileUri); // set the image file namecorretto?

poi  rispondendo alla tua domanda: si ,e nella cartella della camera mi ritorvo pero 2 bitmap identiche di risoluzione bassissima

perché
« Ultima modifica: 16 Febbraio 2012, 12:29:31 CET da fieraf »