Ich habe zwei Fragen, und meine Frage klar hier noch einen kurzen Code-Schnipsel zu machen: „FileNotFoundException ausgelöst, wenn keine Datei unter dem URI oder der Modus vorhanden ist ungültig“Warum ContentResolver.openFileDescriptor IllegalArgumentException auslöst? Ausweg?
ContentResolver resolver = context.getContentResolver();
DocumentsContract.deleteDocument(resolver, documentUri);
resolver.openFileDescriptor(documentUri, "rw");
Die Dokumentation sais, die die letzte Zeile
Aber eigentlich bekomme ich java.lang.IllegalArgumentException
.
(Frage 1) Ist das ein Fehler oder OK?
(Frage 2) openFileDescriptor()
ist offensichtlich keine gute Methode, um zu testen, ob das Dokument existiert. Was ist die "offizielle" Methode, das zu tun?
Edit (hinzugefügt Fehlerprotokoll):
W/System.err: java.lang.IllegalArgumentException: Fehler zu bestimmen, ob 9016-4EF8: myFolder/file1.wav Kind 9016-4EF8 ist: myFolder : java.io.FileNotFoundException: Fehlende Datei für 9016-4EF8: myFolder/file1.wav bei /storage/extSdCard/myFolder/file1.wav
W/System.err: bei android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils .java: 167)
W/System.err: bei android.database.DatabaseUtils.readExceptionWithFileNotFoundE xceptionFromParcel (DatabaseUtils.java:148)
W/System.err: at android.content.ContentProviderProxy.openAssetFile (ContentProviderNative.java:618)
W/System.err: bei android.content.ContentResolver. openAssetFileDescriptor (ContentResolver.java:945)
W/System.err: at android.content.ContentResolver.openFileDescriptor (ContentResolver.java:784)
W/System.err: bei android.content.ContentResolver. openFileDescriptor (ContentResolver.java:739)
Und:
documentUri = "Inhalt: //com.android.externalstorage.documents/tree/9016-4EF8%3AmyFolder/document/9016-4EF8%3AmyFolder%2Ffile1.wav"
„Aber eigentlich komme ich java.lang.IllegalArgumentException“ - Ich empfehle, dass Sie Ihre Frage bearbeiten und die gesamte Java-Stack-Trace veröffentlichen, zusammen mit einer Erklärung von wo du 'documentUri' bekommen hast. "Ist das ein Fehler oder OK?" - Wir können nicht sagen, ohne den gesamten Stack-Trace zu sehen und zu wissen, woher man 'documentUri' hat. "Was ist die 'offizielle' Methode, das zu tun?" - Ich würde ['exists()' auf 'DocumentFile' verwenden] (https://developer.android.com/reference/android/support/v4/provider/DocumentFile.html#exists()). – CommonsWare
Wenn ich in der Lage bin, das mit 'documentUri' identifizierte Dokument ohne Probleme zu entfernen, sollte die Art des eigentlichen Dokuments für' openFileDescriptor' nicht relevant sein, oder? Und bezüglich 'DocumentFile': Ich habe es erfolgreich vermieden und frage mich, ob ich jetzt gezwungen bin, es nur wegen' exists() 'einzuschließen? –