2017-01-14 2 views
1

Hey ich möchte ein Bild im externen Speicher speichern. Ich habe zwei Versionen von hier, aber beide funktionieren nicht. Ziel ist, dass der Benutzer auf eine Schaltfläche klickt und das Bild gespeichert wird und der Benutzer es dann auch in der Galerie sehen kann. So, hier ist Version ein:Bild auf externen Speicher speichern

  String path = Environment.getExternalStorageDirectory().getPath(); 
      File outputDir= new File(path); 
      outputDir.mkdirs(); 
      File newFile = new File(path+"/"+"test.png"); 
      FileOutputStream out = null; 
      try { 
       out = new FileOutputStream(newFile); 
       mutableBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

Und das ist Version 2:

  String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "MyApplication"; 
      File outputDir= new File(path); 
      outputDir.mkdirs(); 
      File newFile = new File(path+"/"+"test.png"); 
      FileOutputStream out = null; 
      try { 
       out = new FileOutputStream(newFile); 
       mutableBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

Vielen Dank für Hilfe

+0

'Environment.getExternalStorageDirectory()' bereits ist ein Ordner, es gibt keine Notwendigkeit, es neu zu erstellen (oder eher ist es mehr wie Sie nicht) –

Antwort

1

Versuchen Sie, diese

AsyncTask fileTask = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object[] objects) { 
File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "MyApplication"); 
if (!directory.exists()) { 
        directory.mkdirs(); 
       } 
Random generator = new Random(); 
int n = 10000; 
n = generator.nextInt(n); 
String name = " "+n+".jpg"; 
File pictureFile = new File(directory, name); 
pictureFile.createNewFile(); 
try { 
FileOutputStream out = new FileOutputStream(pictureFile); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.close(); 
} catch (Exception e) { 
     e.printStackTrace(); 
} 
return null; 
     } 
    }; 
    fileTask.execute(); 

Dies sollte gut funktionieren alle Datei zur Verfügung gestellt Bearbeitungsberechtigungen sind für Ihre App verfügbar.

Bitte beachten Sie auch, dass Sie niemals Dateioperationen im Haupt-Thread durchführen sollten, also verwenden Sie immer AsyncTask, wenn Sie dies noch nicht getan haben.

+0

erhalten auch eine FileNotFindException: java.io.FileNotFoundException:/storage/emuliert/0 /saved_images/Image-7061.jpg: Öffnen fehlgeschlagen: ENOENT (Keine solche Datei oder Verzeichnis) – Luca486

+0

Haben Sie alle Dateizugriffsberechtigungen genommen? Und explizite Erlaubnis vom Benutzer, wenn Sie Gerät testen, ist Marshmallow und höher? –

+0

Hat nur die Berechtigung WRITE_EXTERNAL_STORAGE erhalten. Gerät ist Android Marshmallow 6.0.1 Benötigen Sie eine andere Erlaubnis? – Luca486

Verwandte Themen