2015-10-22 2 views
0

У меня есть действие, которое позволяет пользователю щелкнуть изображение, а onActivityResult() создаст временный файл в каталоге кеша, чтобы сохранить его, прежде чем я загружу его в сервер.Файл не удаляется, даже если file.delete() возвращает true

Это, как я начинаю намерения:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, REQUEST_CODE_CAMERA); 

Вот код внутри onActivityResult:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data){ 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 

     if (requestCode == REQUEST_CODE_CAMERA) { 
      try { 
       Bitmap photo = (Bitmap) data.getExtras().get("data"); 

       File photoFile = new File(getActivity().getCacheDir(), "userprofilepic_temp.jpg"); 

       boolean b = false; 
       if(photoFile.isFile()){ 
        b = photoFile.delete(); 
       } 
       b = photoFile.createNewFile(); //saves the file in the cache dir, TODO delete this file after account creation 
       userPhotoFilePath = photoFile.getAbsolutePath(); 

       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       photo.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 

       FileOutputStream fos = new FileOutputStream(photoFile); 
       fos.write(bytes.toByteArray()); 
       fos.close(); 

       displayUserPhoto(photoFile); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


     } 
     else if (requestCode == REQUEST_CODE_PHOTO_LIBRARY) { 

     } 

    } 
} 

И displayUserPhoto является лишь простой Glide вызов:

@Override 
public void displayUserPhoto(File photoFile) { 
    Glide.with(this) 
      .load(photoFile) 
      .into(userPhotoView); 
} 

Поскольку я хочу переопределить предыдущее изображение, если пользователь решает вернуть изображение, я проверяю, является ли файл photoFile. Если это так, я удаляю его. Затем создайте новый файл.

Проблема в том, что она всегда возвращает тот же исходный снимок. Файл никогда не удаляется, хотя я звоню .delete().

Поскольку я использую кеш-память приложения, мне не нужны права на запись, но я просто пытаюсь включить это, но он все еще не работает.

Edit: добавлен полный поток ниже

+0

Вы пробовали пошагового это в отладчик, сломав после 'удалить()', и наблюдая ли файл на самом деле удален, прежде чем создать и написать новый один? Если это так, то поведение, которое вы видите, может быть вызвано повторным написанием тех же данных в новом файле. –

+1

«Файл никогда не удаляется, даже если я вызываю .delete()». - даже если файл не был удален, вы переписываете его содержимое. Следовательно, ваша проблема кроется в другом месте, возможно, в вашей реализации displayUserPhoto(). Кроме того, пожалуйста, избавитесь от 'ByteArrayOutputStream', так как это ужасная трата памяти, поскольку вы просто оборачиваетесь и записываете данные с помощью' FileOutputStream'. Передайте 'FileOutputStream'' compress() '. – CommonsWare

+0

@CommonsWare Я добавил полный поток. Я не вижу, где это может испортиться. Поток кажется довольно простым. – Sree

ответ

1

Я действительно не знаю, что делать здесь, так как ответ совершенно иначе, чем я первоначально думал, что это было, так что это на самом деле не относятся к этому вопросу.

Glide не только сохранил кэш в памяти, но и на диске, поэтому я продолжал получать одинаковое изображение.

Решение просто:

Glide.with(this) 
      .load(photoFile) 
      .skipMemoryCache(true)//this 
      .diskCacheStrategy(DiskCacheStrategy.NONE)//and this 
      .into(userPhotoView);