2016-10-17 7 views
0

Я разрабатываю приложение для Android. В моем приложении я загружаю несколько изображений на сервер, используя сетевую библиотеку Retrofit. Перед загрузкой файла я создаю временный файл из растровых изображений. Затем удалите их после загрузки.Невозможно преобразовать строку URI в файл образа обратно в Android

photoFiles = new ArrayList<File>(); 
     MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); 
     int index = 0; 
     for(Bitmap bitmap: previewBitmaps) 
     { 
      File file = null; 
      try{ 
       String fileName = String.valueOf(System.currentTimeMillis())+".jpeg"; 
       file = new File(Environment.getExternalStorageDirectory(), fileName); // create temporary file start from here 
       if(file.exists()) 
       { 
        file.delete(); 
       } 
       OutputStream os = new BufferedOutputStream(new FileOutputStream(file)); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); 
       os.close(); 

       photoFiles.add(file); 
       requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file)); 
      } 
      catch (Exception e) 
      { 
       Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
      index++; 
     } 
//Upload process goes here and delete files back after upload 

Использование вышеуказанного кода, все работает нормально. Но проблема в том, что я должен создавать временные файлы. Я не хочу создавать временные файлы. Что я хочу сделать, так это создать массив строк Uri, когда я забираю файл. Затем при загрузке файла я буду преобразовывать их в файл и выполнять процесс загрузки.

photoFiles = new ArrayList<File>(); 
     MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); 
     int index = 0; 
     for(Bitmap bitmap: previewBitmaps) 
     { 
      File file = null; 
      try{ 

       Uri uri = Uri.parse(photosUriStrings.get(index)); 
       file = new File(getPathFromUri(uri)); 
       Toast.makeText(getBaseContext(),getPathFromUri(uri),Toast.LENGTH_SHORT).show(); 
       photoFiles.add(file); 
       requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file)); 
      } 
      catch (Exception e) 
      { 
       Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
      index++; 
     } 

Как вы можете видеть выше, я преобразовываю строку URI в файл и загружаю его. Но на этот раз не удалось загрузить файл. Файл также не является нулевым. Поэтому я уверен, что ошибка связана с преобразованием строки uri обратно в файл образа обратно, потому что мой старый код выше работает нормально. Почему я не могу этого сделать? Как я могу успешно конвертировать из URI в файл образа обратно, пожалуйста?

Я нашел

Convert file: Uri to File in Android

и

Create File from Uri type android

оба не работают.

+0

Непонятно, что вы хотите. Давайте начнем с самого начала. Что у вас есть, что вы хотите загрузить? Файлы или растровые изображения или что? – greenapps

+0

Я хочу загрузить файл. Но мне нужно показать изображение предварительного просмотра. Поэтому я перешел на битмапы. Но я сохранил строки Ури в результате обратного вызова файла сборщика файлов. –

+0

Если вы хотите загрузить файл, загрузите этот файл. Какое это имеет значение, что вы также должны показывать изображение предварительного просмотра? Просто загрузите файл. Почему это не так? – greenapps

ответ

0

Я не знаю о вашем вопросе, но я думаю, что это может вам помочь. Этот код с одной строкой поможет вам получить convert URI to file и показать на ваш взгляд.

Picasso.with(getContext()).load("URI path").into(holder.imgID);