2012-02-10 8 views
8

autorización así que esto aquí es la intención que estoy enviandoonActivityResult regresa con datos = 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); 

Y luego en el onActivityResult estoy haciendo esto:

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); 
    } 

El LogCat está mostrando una NullPointerException en la línea que dice imagen guardada ....
Y también esto:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

Esto sucede si trato de usar el objeto data o el campo fileUri de mi clase.
¿Por qué se devuelven los datos null?
¿Por qué, aunque estoy usando un campo de la clase, sigo teniendo el mismo error?

+0

No está utilizando getIntent() para acceder al MediaStore.EXTRA_OUTPUT en el Resultado de la actividad –

+0

no. no estoy seguro de cómo usarlo. ¿Me puede dar un fragmento de código? – prometheuspk

+0

intent.putExtra (MediaStore.EXTRA_OUTPUT, fileUri); En Result_OK of Activity use Uri u = data.getData(); para obtener uri También asegúrese de que el archivo Uri no sea el nombre de archivo URI. –

Respuesta

8

Siempre que almacena una imagen al pasar EXTRAOUTPUT con la intención de cámara es decir

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

en un archivo, el parámetro de datos dentro de la onActivityResult siempre devuelve null. Por lo tanto, en lugar de usar datos para recuperar la imagen, use la ruta de archivo para recuperar el Bitmap.

Así onActivityResult sería algo como esto:

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); 
    } 

Asegúrese de que usted ha tomado imageUri o fileURI como una variable global para que pueda acceder a ella en el interior onActivityResult también. Lo mejor de la suerte

0

La forma correcta/preferido para manejar los datos en estos casos sería como:

En llamada Actividad conjunto de datos a la intención, entonces SetResult código como RESULT_OK y luego terminar esa actividad.

En esta actividad recieving, compruebe el código de resultado .. y recuperar datos de variables como Intención: intent.getExtra("... "); // Las variables que has puesto en la actividad del niño que se ha cerrado ahora ..

+0

me estás malinterpretando. De hecho, estoy llamando a la aplicación de cámara del teléfono. No tengo necesidad de establecer el resultado yo mismo. – prometheuspk

Cuestiones relacionadas