Как получить каталог и имя файла изображения, выбранного из галереи

Мне нужно использовать эту функцию,

java.io.File.File (каталог файла, имя строки)

общедоступный файл (каталог файла, строковое имя)

Добавлено в уровне API 1 Создает новый файл, используя указанный каталог и имя. Параметры dir каталог, в котором хранится файл. назовите имя файла. Выдает исключение NullPointerException, если имя имеет значение null.

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

Вот фрагмент:

public File String_to_File(String img_url) {

        try {
            File rootSdDirectory = Environment.getExternalStorageDirectory();

---------------------------------------------------------------------------------------
            **casted_image = new File(rootSdDirectory, "attachment.jpg");**
---------------------------------------------------------------------------------------

            if (casted_image.exists()) {
                casted_image.delete();
            }
            casted_image.createNewFile();

            FileOutputStream fos = new FileOutputStream(casted_image);

            URL url = new URL(img_url);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.connect();
            InputStream in = connection.getInputStream();

            byte [ ] buffer = new byte [1024];
            int size = 0;
            while ((size = in.read(buffer)) > 0) {
                fos.write(buffer, 0, size);
            }
            fos.close();
            return casted_image;

        } catch (Exception e) {

            System.out.print(e);
            // e.printStackTrace();

        }
        return casted_image;
    }

    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);

         if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
             Uri selectedImage = data.getData();
             String[] filePathColumn = { MediaStore.Images.Media.DATA };

             Cursor cursor = getContentResolver().query(selectedImage,
                     filePathColumn, null, null, null);
             cursor.moveToFirst();

             int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
             String picturePath = cursor.getString(columnIndex);
             cursor.close();

             iv.setImageURI(selectedImage);

             // String picturePath contains the path of selected Image
         }
    }

Что нужно сделать, чтобы передать правильные параметры функции между строками?

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


person Akshat    schedule 10.09.2014    source источник
comment
Я не беру изображение из URL-адреса, я выбираю его сейчас из галереи. Поэтому мне нужен каталог и имя выбранного файла.   -  person Akshat    schedule 10.09.2014
comment
у вас есть String picturePath = cursor.getString(columnIndex); это путь, вы можете создать переменную-член класса и присвоить ей cursor.getString(columnIndex);. а затем получить к нему доступ в String_to_File(String img_url)   -  person Sagar Pilkhwal    schedule 10.09.2014


Ответы (2)


Параметр EXTRA_ALLOW_MULTIPLE устанавливается в намерении с помощью метода Intent.putExtra():

intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

Ваш код выше должен выглядеть так:

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE );
//intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

Примечание. Параметр EXTRA_ALLOW_MULTIPLE доступен только в Android API 18 и выше.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE  && resultCode == RESULT_OK && null != data) {
    Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    Cursor cursor = getContentResolver().query(selectedImage,
         filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    casted_image = new File(picturePath);
    cursor.close();
    // String picturePath contains the path of selected Image
  }
}
person Sagar Pilkhwal    schedule 10.09.2014

Вы можете сделать так.

File selectedFile = Environment.getExternalStorageDirectory();
File parentDir = selectedFile.getParentFile();

casted_image = new File(parentDir, "attachment.jpg");

или если вы хотите передать имя выбранного файла вместо конкретного имени файла. используйте следующую строку.

casted_image = new File(parentDir, selectedFile.getName());

вы также можете проверить, является ли выбранный файл каталогом или обычным файлом, используя selectedFile.isFile(); и selectedFile.isDirectory();

person firoz.shaikh    schedule 10.09.2014
comment
Он показывает ошибку загрузки изображения. Это каталог. Я ссылаюсь на chintankhetiya.wordpress. com/2013/07/18/ . Все хорошо, за исключением того, что я хочу использовать свое собственное выбранное изображение вместо его URL-изображения. Пожалуйста помоги. - person Akshat; 10.09.2014