получить путь к сохраненному изображению вызывает сбой

есть ли стандартный способ получить путь к сохраненному изображению, снятому камерой, потому что я нашел разные способы отображения пути, но они вызывают сбой приложения. и поскольку я новичок в программировании для Android, мне просто нужно некоторое руководство. Пожалуйста, проверьте код:

Код Java:

@Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File imagesFolder = new File(Environment.getExternalStorageDirectory(), "My Images");
            imagesFolder.mkdirs();
            File image = new File(imagesFolder, "img01");
            uriSavedImage = Uri.fromFile(image);
            File f = new File (uriSavedImage.getPath());// <---------
            //imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
            imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, f.getPath()); // <---------
            startActivityForResult(imageIntent,CAMERA_REQUEST_CODE);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if ((requestCode == CAMERA_REQUEST_CODE) && (resultCode == RESULT_OK)) {

            Toast.makeText(getApplicationContext(),// <---------
                    " "+data.getData(), 
                    Toast.LENGTH_SHORT).show();

person Androelpha    schedule 21.03.2012    source источник
comment
Вы можете вставить сюда трассировку стека?   -  person Triode    schedule 21.03.2012


Ответы (1)


Он падает, потому что вы передаете метод getParent() в convertImageUriToFile (вы можете увидеть NullPointerException в трассировке стека). Согласно документам Android getParent() возвращает значение null, если деятельность не является встроенной. Ваш, скорее всего, нет.

Вместо этого используйте File f = convertImageUriToFile(uriSavedImage, this);.

Для другой ошибки, imageUri имеет значение null, см. этот ответ для возможного объяснения и решения.

Кроме того, ваш imageUri является uri типа «file://», а не типом «content://». Чтобы получить путь от него, используйте

new File(uri.getPath());

вместо вашего метода convertImageUriToFIle(). Я думаю, что этот метод будет работать только для uris типа «content://».

На самом деле вам не нужно получать путь к файлу из uri, который вы сделали сами, у вас есть этот путь в строке:

File image = new File(imagesFolder, "img01");
person Tomasz Niedabylski    schedule 21.03.2012
comment
Toast.makeText(getApplicationContext(), " "+convertImageUriToFile(uriSavedImage, this).getAbsolutePath(), Toast.LENGTH_SHORT).show(); Я пытался отобразить путь, как указано, но приложение все равно вылетает - person Androelpha; 22.03.2012
comment
Предоставьте трассировку стека, если вам нужна помощь. - person Tomasz Niedabylski; 22.03.2012
comment
Разве ваш imageUri не равен нулю? Во время выполнения запроса возникает исключение nullPointerException. Убедитесь, что ваш imageUri не является нулевым и имеет правильный формат (начинается с содержимого: //) - person Tomasz Niedabylski; 22.03.2012
comment
я присваиваю значение imageuri, но оно пустое - person Androelpha; 22.03.2012
comment
пожалуйста, проверьте код еще раз, я изменил метод onActivityResult() - person Androelpha; 22.03.2012
comment
я изменил код, пожалуйста, найдите его опубликованным. Но теперь приложение не вылетает и отображает null. Обратите внимание, что я использую эмулятор, а не реальное устройство. - person Androelpha; 23.03.2012