2011-01-16 2 views
0

Ich erstelle eine Anwendung, mit der Benutzer "grafische" Notizen erstellen können. Ich habe ein Problem, wenn versucht wurde, Bitmap in meinem benutzerdefinierten ContentProvider zu speichern (NotesProvider erweitert ContentProvider). Laut Google sollte DevGuide die Methode openFile (Uri uri, String mode) überschreiben. Und ich habe Fehler: Datei nicht gefunden. Ich schaue durch dieses Problem und bekomme die Lösung here. Dann baue ich meine Darstellung wie soDateispeicher des Content-Providers Nein Datei oder Verzeichnis

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { 
     if(sUriMatcher.match(uri)!=NOTE_ID) 
      throw new IllegalArgumentException("Unsupported open file on directori uri " +uri); 
     File root = new File(Environment.getDataDirectory(), 
      BITMAPS_PATH); 
     root.mkdirs(); 
     File path=new File(root, uri.getEncodedPath()); 
     int imode = 0; 
     if (mode.contains("w")) { 
      imode |= ParcelFileDescriptor.MODE_WRITE_ONLY; 
      if (!path.exists()) { 
       try { 
        path.createNewFile(); 
       } catch (IOException e) { 
        // TODO decide what to do about it, whom to notify... 
        e.printStackTrace(); 
       } 
      } 
     } 
     if (mode.contains("r")) imode |= ParcelFileDescriptor.MODE_READ_ONLY; 
     if (mode.contains("+")) imode |= ParcelFileDescriptor.MODE_APPEND; 

     return ParcelFileDescriptor.open(path, imode); 
} 

und Anwendung haben IOException

12:42:12.714 2550 WARN System.err java.io.IOException: No such file or directory 

Antwort

0

ich ein ähnliches Problem auf diese hatte. Wenn in Ihrem Emulator der Ordner Environment.getDataDirectory() nicht existiert, erhalten Sie eine Ausnahme. Sie müssen den Ordner zuerst manuell (nicht über den Code) entweder über das Terminal oder Adverb erstellen. Sobald Sie das getan haben, versuchen Sie es erneut mit Ihrem Code und es sollte funktionieren.

+0

Vielen Dank! auf emuulator existiert Verzeichnis, aber Ärger war in diesem uri.getEncodedPath() es ist nicht nur Dateiname, ich habe meinen Code mit diesem Fix geändert und es funktioniert. – Kirill