onActivityResult возвращает с data = 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);

И тогда в onActivityResult я делаю это:

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

LogCat показывает исключение NullPointerException в строке, которая говорит, что изображение сохранено ....
А также это:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

Это происходит ли я пытаюсь использоватьdata объект илиfileUri поле моего класса.
Почему данные возвращаютсяnull?
Почему, хотя я использую поле класса, я все еще получаю ту же ошибку?

 DKIT10 февр. 2012 г., 18:20
Является ли fileUri статической глобальной переменной?
 prometheuspk10 февр. 2012 г., 18:23
Нет. я сделаю это и протестирую
 prometheuspk10 февр. 2012 г., 18:24
не работал :(
 Arpit Garg10 февр. 2012 г., 18:17
Вы не используете getIntent () для доступа к MediaStore.EXTRA_OUTPUT в onActivity Result
 prometheuspk10 февр. 2012 г., 18:19
Нет. не уверен, как его использовать. Можете ли вы дать мне фрагмент кода?

Ответы на вопрос(2)

удет следующим:

В вызываемом Activity задайте данные для Intent, затем установите код RESRESULT в качестве RESULT_OK и затем завершите это действие.

В этом действии получения проверьте код результата .. и получите данные из переменной Intent как:intent.getExtra("... "); // Переменные, которые вы установили в дочернем действии, которое было закрыто сейчас ..

 prometheuspk10 февр. 2012 г., 22:15
ты меня неправильно истолковываешь. Я на самом деле звоню в собственное приложение камеры телефона. Мне не нужно самому устанавливать результат.
Решение Вопроса

когда вы сохраняете изображение, передаваяEXTRAOUTPUT с намерением камеры т.е.

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

в файле, параметр данных внутриonActivityResult всегда возвращать ноль. Таким образом, вместо использования данных для получения изображения, используйте путь к файлу для полученияBitmap.

ТакonActivityResult будет что-то вроде этого:

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

Убедитесь, что вы взяли imageUri или fileUri в качестве глобальной переменной, чтобы вы могли обращаться к ней внутриonActivityResult также. Удачи

Ваш ответ на вопрос