2014-09-10 2 views
0

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

java.io.File.File (реж файла, имя String)

общественного файла (File dir, String name)

Добавлено в уровень 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-text-image-in-twitter-android-example. Все хорошо, за исключением того, что я хочу использовать свое собственное выбранное изображение вместо его URL-изображения. Пожалуйста помоги.

+0

Я не беру изображение из URL, я выбираю его из галереи сейчас. Поэтому мне нужен реестр и имя выбранного файла. – Akshat

+0

у вас есть 'String picturePath = cursor.getString (columnIndex);' это путь, вы можете создать переменную-член класса и назначить 'cursor.getString (columnIndex);' ему. и затем получить доступ к нему в 'String_to_File (String img_url)' –

ответ

1

Опция 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 
    } 
} 
1

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

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

+0

Показывает ошибку загрузки PicIs. Это каталог. Я ссылаюсь на http://chintankhetiya.wordpress.com/2013/07/18/sharing-text-image-in-twitter-android-example/. Все хорошо, за исключением того, что я хочу использовать свое собственное выбранное изображение вместо его URL-изображения. Пожалуйста помоги. – Akshat