2012-02-10 10 views
8

Ok quindi questo qui è l'intento io mandoonActivityResult ritorna con i dati = null

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name 
startActivityForResult(intent, REQUEST_CODE); 

E poi in onActivityResult sto facendo questo:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.i("Intent name:",data.toString()); 
     if (requestCode == REQUEST_CODE){ 
      if (resultCode == Activity.RESULT_OK){ 
       Toast.makeText(this, "Image saved to \n" + fileUri.toString() , Toast.LENGTH_LONG).show(); 
       Toast.makeText(this, "Result Code: " + resultCode , Toast.LENGTH_LONG).show(); 
       //Bitmap mBitMap = BitmapFactory.decodeFile(data.getData().toString()); 
       //imageView.setImageBitmap(mBitMap); 
      } 
      else if (resultCode == RESULT_CANCELED){ 
       Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG).show(); 
      } 
      else { 
       Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG).show(); 
      } 

     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

Il LogCat sta mostrando un NullPointerException a la riga che dice immagine salvata ....
E anche questo:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

Questo succede se provo a usare l'oggetto data o il campo fileUri della mia classe.
Perché vengono restituiti i dati null?
Perché è che anche se sto usando un campo della classe ho ancora lo stesso errore?

+0

Non si utilizza getIntent() per accedere a MediaStore.EXTRA_OUTPUT in onActivity Result –

+0

no. non so come usarlo. Puoi darmi un frammento di codice? – prometheuspk

+0

intent.putExtra (MediaStore.EXTRA_OUTPUT, fileUri); In Result_OK di Activity usa Uri u = data.getData(); per ottenere uri Assicurati anche che file Uri non sia Uri nome file .. –

risposta

8

Ogni volta che si salva un'immagine passando EXTRAOUTPUT con intento fotocamera cioè

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

in un file, il parametro di dati all'interno del onActivityResult ritorno sempre nullo. Pertanto, anziché utilizzare i dati per recuperare l'immagine, utilizzare il percorso file per recuperare Bitmap.

Quindi onActivityResult sarebbe qualcosa di simile:

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

    if (requestCode == REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 
      String[] fileColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(imageUri, 
       fileColumn, null, null, null); 
      String contentPath = null; 
      if (cursor.moveToFirst()) { 
       contentPath = cursor.getString(cursor 
        .getColumnIndex(fileColumn[0])); 

       Bitmap bmp = BitmapFactory.decodeFile(contentPath); 
       ImageView img = (ImageView) findViewById(R.id.imageView1); 
       img.setImageBitmap(bmp); 


      } else if (resultCode == RESULT_CANCELED) { 
       Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG) 
       .show(); 
      } else { 
       Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG) 
       .show(); 
      } 

     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

Assicurarsi di aver preso imageUri o fileURI come una variabile globale in modo che sia possibile accedere all'interno onActivityResult pure. Buona fortuna

0

Il modo corretto/preferito per gestire i dati in questi casi sarebbe come:

In detta attività specificati i dati al Intent, quindi setResult codice come RESULT_OK e quindi completare l'attività.

In questa attività recieving, controllare il codice risultato .. e recuperare i dati da variabili come Intent: intent.getExtra("... "); // Le variabili che avete impostati nell'attività figlio che è stato chiuso ora ..

+0

stai interpretando male me. In realtà sto chiamando l'app fotocamera del telefono. Non ho bisogno di impostare il risultato da solo. – prometheuspk

Problemi correlati