4

DocumentFile を使用してファイルのメタデータと存在を確認します。これは次のようにインスタンス化されます。

DocumentFile df = DocumentFile.fromSingleUri(context, uri);
boolean exists = df.exists();

アプリがどのように反応するかを確認するためにファイルシステムでファイルを手動で意図的に削除するまで、ファイルへの uri は以​​前は機能していました。これで、このスタック トレースがアプリに表示されます。

03-14 11:33:08.559 27087-27097/? E/DatabaseUtils: Writing exception to parcel
  java.lang.IllegalArgumentException: Failed to determine if primary:Download/thefile.txt is child of primary:Download: java.io.FileNotFoundException: Missing file for primary:Download/thefile.txt at /storage/emulated/0/Download/thefile.txt
      at com.android.externalstorage.ExternalStorageProvider.isChildDocument(ExternalStorageProvider.java:326)
      at android.provider.DocumentsProvider.enforceTree(DocumentsProvider.java:198)
      at android.provider.DocumentsProvider.query(DocumentsProvider.java:489)
      at android.content.ContentProvider.query(ContentProvider.java:1017)
      at android.content.ContentProvider$Transport.query(ContentProvider.java:238)
      at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
      at android.os.Binder.execTransact(Binder.java:453)
03-14 11:33:08.561 27046-27419/packagename W/DocumentFile: Failed query: java.lang.IllegalArgumentException: Failed to determine if primary:Download/thefile.txt is child of primary:Download: java.io.FileNotFoundException: Missing file for primary:Download/thefile.txt at /storage/emulated/0/Download/thefile.txt

アプリをクラッシュさせることはありません。DocumentFile を使用しようとするたびに、このスタック トレースが生成されるだけです。したがって、最悪の場合、これは単に logcat の刺激になります。

FileNotFoundExceptionを使用してこれを回避することを期待し.exists()ます。そこにないファイルを操作しないように、存在するかどうかを確認しています。

この場合に推奨される使用する別の機能はありますか?

4

1 に答える 1

9

私はあまりにも長い間、この煩わしさに対処してきました。包むこともできません。この誤ったエラーについて、バグ レポートを提出しました。

https://code.google.com/p/android/issues/detail?id=241400&thanks=241400&ts=1489099169

サポートを追加すると、問題がより早く修正されます。

于 2017-03-09T22:44:01.340 に答える