2017-08-03 58 views
0

我有一個應用程序從服務器上下載大約6k張照片,並將它們存儲在配置爲y我的應用程序設置的文件夾中,我使用.nomedia文件將該文件隱藏在庫中,並且它們僅在我的應用程序庫,但當我離開我的設備充電大約5000張照片消失,並且文件夾中只剩下920左右,我完全不知道爲什麼文件被刪除。使用donwloadManager下載的文件消失

這裏是我的下載文件的代碼

DownloadManager downloadManager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE); 
    DownloadManager.Request request; 
    fileURL = convertUri(fileURL); 
    if (!URLUtil.isValidUrl(fileURL)) { return false; } 
    Uri downloadUri = Uri.parse(fileURL); 
    String fileName = URLUtil.guessFileName(fileURL, null, MimeTypeMap.getFileExtensionFromUrl(fileURL)); 
    deleteFileIfExists(new File(getAbsolutePath(path), fileName)); 
    request = new DownloadManager.Request(downloadUri); 
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
      .setTitle(fileName) 
      .setAllowedOverRoaming(false) 
      .setVisibleInDownloadsUi(false) 
      .setDestinationInExternalPublicDir(getPath(path), fileName); 
    downloadManager.enqueue(request); 
+0

如何以及下載過程開始的頻率?它是自動的嗎?或預定?因爲我看到這個'deleteFileIfExists ...',所以可能會啓動另一個下載過程,並再次開始下載文件,只是這次它刪除當前文件?如果你等待和刷新文件夾,你會看到文件數增加? 925 926 ... ?? – Yazan

+0

下載不是自動的,我有一個按鈕來啓動它,不能被啓動兩次,服務器提供的URL,每次只下載新文件,但如果文件在服務器上更新,應用程序再次收到它,所以我有刪除舊的,這就是爲什麼我在那裏有deletedFileIfExists功能。 基本上,當應用程序結束下載過程我保存日期時間,所以下次我試圖問服務器,它只下載新的或更新文件 –

回答

0

這個週末,我與3個不同的設備和2種不同的下載方法的測試,在一個與下載管理器中的文件dissapeared,所以如果有人有同樣的問題在這裏是如何,我donwloading文件:

public static boolean downloadFile(Activity activity, String fileURL) { 
    fileURL = convertUri(fileURL); 
    if (!URLUtil.isValidUrl(fileURL)) { return false; } 

    try { 
     String fileName = URLUtil.guessFileName(fileURL, null, MimeTypeMap.getFileExtensionFromUrl(fileURL)); 
     deleteFileIfExists(new File(activity.getExternalFilesDir(""), fileName)); 

     URL u = new URL(fileURL); 
     URLConnection conn = u.openConnection(); 
     int contentLength = conn.getContentLength(); 

     DataInputStream stream = new DataInputStream(u.openStream()); 

     byte[] buffer = new byte[contentLength]; 
     stream.readFully(buffer); 
     stream.close(); 

     File file = new File(activity.getExternalFilesDir(""), fileName); 
     DataOutputStream fos = new DataOutputStream(new FileOutputStream(file)); 
     fos.write(buffer); 
     fos.flush(); 
     fos.close(); 
    } catch(FileNotFoundException e) { 
     return false; // swallow a 404 
    } catch (IOException e) { 
     return false; // swallow a 404 
    } 
    return true; 
} 
0

添加System.currenttimeMillisecond()來fileUrl,以確保您的文件名不被重複。

+0

我控制重複刪除它們之前redownloading,因爲我需要覆蓋文件,如果他們在服務器中更新,所以我需要保持原來的文件名,因爲它是。 –

+0

Dammmm ...我明白了 – MinDroid