1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

PNG nach SDCARD speichern: EISDIR Fehler

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von isam2k, 04.07.2012.

  1. isam2k, 04.07.2012 #1
    isam2k

    isam2k Threadstarter Erfahrener Benutzer

    Beiträge:
    239
    Erhaltene Danke:
    43
    Registriert seit:
    27.04.2010
    Hi alle,

    ich komm mal wieder nicht weiter. Ich versuche eine Bitmap als PNG auf die sdcard zu schieben:

    Code:
    if (storageState.equals(Environment.MEDIA_MOUNTED)) {
                //Set filename accordingly
                fileName += ".PNG";
                
                //Get pictures folder
                String exDir = Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_PICTURES).toString();
                
                //Create a file to the project directory
                File path = new File(exDir + "/" + projectName);
                
                //Make the project directory if necessary
                path.mkdirs();
                
                File file = new File(path, fileName);
                
                try {
                    FileOutputStream out = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                    out.flush();
                    out.close();
                }
                catch (Exception e) {
                    msg = Toast.makeText(
                            context,
                            "Error: Unable to write bitmap data. " + e.getMessage(),
                            Toast.LENGTH_LONG);
                    msg.show();
                    return false;
                }
            }
    
    Sagen wir mal, ich rufe den obigen Text mit folgenden Parametern auf:

    Code:
    projectName = "Sprites";
    fileName = "Default";
    
    Dann krieg ich jedes mal die selbe Exception:

    Das ganze ist nach folgendem Muster aufgebaut, welches anscheinend funktioniert:

    Android-er: Save file to SD Card

    Ich hab irgendwie das Gefühl, dass das ganze durch

    Code:
    path.mkdirs();
    
    verursacht wird, denn auch die Directory kann ich nach dem Ausführen nicht auf der SDCARD ausmachen. (Obwohl der Rückgabewert true ist :scared:)

    Allerdings schlägt auch folgendes fehl:

    Berechtigungen sind gesetzt, Testgerät ist ein SGN mit Android 4.0.4.

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="ch.subgate.spritestudio"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="10"
            android:targetSdkVersion="10" />
        
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    [...]
    
    Hilfe bitte... Ich hab keine Ahnung was ich falsch mache. Danke im Voraus.
     
    Zuletzt bearbeitet: 04.07.2012
  2. Thyrion, 04.07.2012 #2
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,845
    Erhaltene Danke:
    2,450
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    Nur so ein Schuss ins Blaue:

    Ersetze mal
    Code:
    //Create a file to the project directory
                File path = new File(exDir + "/" + projectName);
                
                //Make the project directory if necessary
                path.mkdirs();
                
                File file = new File(path, fileName);
    mit
    Code:
                File file = new File(exDir + "/" + projectName, fileName);
                file.mkdirs();
    


    EDIT: Oder häng hier noch ein / dran -> File path = new File(exDir + "/" + projectName + "/");
     
  3. isam2k, 04.07.2012 #3
    isam2k

    isam2k Threadstarter Erfahrener Benutzer

    Beiträge:
    239
    Erhaltene Danke:
    43
    Registriert seit:
    27.04.2010
    Hatte ich mit grosser Sicherheit bereits versucht, habs aber noch mal getestet und die Exception bleibt dieselbe. (Rebuild forciert, zur Sicherheit).

    Edit: Um das noch anzugeben

    Code:
    file.getPath(); // = "/mnt/sdcard/Pictures/Sprites/Default.PNG"
    


    Der ursprüngliche Beitrag von 13:49 Uhr wurde um 14:09 Uhr ergänzt:

    Ooook jetzt wirds creepy:

    Ich hab eben folgendes hinzugefügt:

    Code:
    if (file.isDirectory()) {
          Log.d("SpriteStudio", "Yep, that sucks!");
    }
    
    Und nun krieg ich KEINE Exception mehr (allerdings wird nach wie vor nix gespeichert und auch die Directory wird nicht erstellt). Also hab ich auch nochmals den Rückgabewert von mkdirs gecheckt, welcher nun (oh wunder): false ist.

    Ich bin leicht verwirrt...

    Der ursprüngliche Beitrag von 14:09 Uhr wurde um 15:20 Uhr ergänzt:

    Ok, ich weiss nicht, weshalb mein PC mir das antut, aber:

    Ich hab jetzt mal

    Code:
    Environment.getExternalStoragePublic...
    
    durch

    Code:
    Environment.getExternalStorageDirectory();
    
    Ersetzt, was bewirkte, dass file.isDirectory() nicht länger true ergab (ausserdem machten nun auch die Rückgabewerte von mkdirs plötzlich Sinn (true beim ersten Mal und false danach, anstatt abwechselnd true und false). Allerdings konnte ich nach wie vor den betreffenden Ordner nicht auf der sdcard ausmachen.

    Hab nun, um auch noch die letzte Eventualität zu prüfen den ESFileExplorer geladen, um zu schauen, ob die Dateien unter Umständen einfach auf dem PC nicht sichtbar sind.

    Tadaaaa! Da waren sie, alles ok!

    Wie kommt es, dass die Dateien und Dirs aber am PC nicht sichtbar sind (mtp)?
     
    Zuletzt bearbeitet: 04.07.2012

Diese Seite empfehlen