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
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