0
我有一個允許用戶拍攝圖片的活動,onActivityResult()
將在緩存dir中創建一個臨時文件以存儲它,然後將其上傳到服務器。即使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僅僅是一個簡單的滑行電話:
@Override
public void displayUserPhoto(File photoFile) {
Glide.with(this)
.load(photoFile)
.into(userPhotoView);
}
因爲我想覆蓋以前的圖片,如果用戶決定重新拍照,我檢查photoFile是否是一個文件。如果是,我刪除它。然後創建一個新文件。
問題是它總是返回相同的初始圖片。即使我撥打.delete()
,該文件也不會被刪除。
由於我正在使用應用程序的緩存目錄,我不需要寫入權限,但只是incase我試圖包括,但它仍然無法正常工作。
編輯:添加了完整的流程如下
您是否嘗試過通過這個在調試器步進,以後'刪除()'打破,並觀察是否再創建該文件實際上是刪除和寫入新一?如果是這樣,那麼您所看到的行爲可能會由於將相同的數據重新寫入新文件而導致。 –
「即使我調用.delete(),該文件也不會被刪除。」 - 即使文件未被刪除,您也覆蓋其內容。因此,你的問題在別處,也許在你的'displayUserPhoto()'實現中。此外,請刪除'ByteArrayOutputStream',因爲這是一個可怕的內存浪費,因爲您只是轉過身來使用'FileOutputStream'寫數據。將'FileOutputStream'傳遞給'compress()'。 – CommonsWare
@CommonsWare我添加了完整的流程。我不知道它會在哪裏搞亂。流程看起來很基本。 – Sree