2016-06-29 11 views
-1

Der folgende Code speichert die Datei vorübergehend (im Cache-Speicher, denke ich), aber ich muss die Datei dauerhaft speichern, was soll ich tun?Dateien dauerhaft speichern

public void downloadFile(){ 
      StorageReference islandRef = storageRef.child("cliff.jpg"); 
      File localFile = null; 
      try { 
       File cacheDir = getApplicationContext().getCacheDir(); 
       localFile = File.createTempFile("images", ".jpg", cacheDir); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 


       } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle any errors 
       Log.i("msg", exception.toString()); 
       Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show(); 

      } 
     }); 
+0

define * permanent * – Selvin

Antwort

0

Wie dauerhaft sprechen wir? Sollten die Daten bestehen bleiben, wenn die App deinstalliert wird? Eine Lösung besteht darin, die Daten in den internen Speicher zu speichern (zugänglich nur für die App und entfernt wird, wenn die Anwendung deinstalliert wird) durch Änderung:

File cacheDir = getApplicationContext().getCacheDir(); 

zu

File cacheDir = getApplicationContext().getFilesDir(); 
+0

Ich muss die Dateien dauerhaft speichern, auch wenn App deinstalliert wird. Bevor ich den DownloadManager für den gleichen Zweck verwendet habe. –

0

Wenn Sie eine Datei möchten, die leicht ist erreichbar mit sich selbst und anderen Anwendungen, sollten Sie die Wurzel Ihrer externen Speicher erhalten und Ordner dort erstellen .. mit so etwas wie ...

File externalRoot = Environment.getExternalStorageDirectory(); 
File dir = new File (externalRoot .getAbsolutePath() + "/parentFolder/childFolder"); 
dir.mkdirs(); 
File file = new File(dir, "filename"); 
... 
FileOutputStream f = new FileOutputStream(file); 
... 

Denken Sie daran, wenn die sto überprüfen sollten, Wut ist beschreibbar oder nicht. Dies wird zu anderen Anwendungen sichtbar sein und wenn Sie diese getApplicationContext().getFilesDir();

Verwendung nicht wollen, dass Pfad wie /data/data/com.package/files

0

Um geben das Bild zu speichern, müssen Sie es mit dem internen oder externen Speicher schreiben von dabei:

Statt:

File cacheDir = getApplicationContext().getCacheDir(); 
localFile = File.createTempFile("images", ".jpg", cacheDir); 

Verwendung:

File cacheDir = getApplicationContext().getFilesDir(); 
localFile = new File("images.jpg", cacheDir); 

Ich weiß nicht, wie StorageReference von Firebase funktioniert, aber ich ziehe zurück, dass .getFile den Inhalt in die Datei streamt. In diesem Fall sollte dieser Code funktionieren