Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 为什么ContentResolver.openFileDescriptor抛出IllegalArgumentException?出路?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个问题,为了让我的问题在这里明确一个简短的代码片段: @H_197_5@ @H_197_5@
ContentResolver resolver = context.getContentResolver();
DocumentsContract.deleteDocument(resolver,documentUri);
resolver.openFileDescriptor(documentUri,"rw");
@H_197_5@该文档说明最后一行“如果URI或模式下没有文件,则抛出FileNotFoundException”.

@H_197_5@但实际上我得到了java.lang.IllegalArgumentexception.

@H_197_5@(问题1)这是一个错误还是确定?

@H_197_5@(问题2)openFileDescriptor()显然不是测试文档是否存在的好方法.这样做的“官方”方法是什么?

@H_197_5@编辑(添加错误日志):

@H_197_5@W / System.err:java.lang.IllegalArgumentexception:无法确定9016-4EF8:myFolder / file1.wav是否为9016-4EF8的子级:myFolder:java.io.FileNotFoundException:缺少9016-4EF8的文件:myFolder / file1 .wav at /storage/extSdCard/myFolder/file1.wav

@H_197_5@W / System.err:在Android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)

@H_197_5@W / System.err:在Android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:148)

@H_197_5@W / System.err:在Android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:618)

@H_197_5@W / System.err:在Android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:945)

@H_197_5@W / System.err:在Android.content.ContentResolver.openFileDescriptor(ContentResolver.java:784)

@H_197_5@W / System.err:在Android.content.ContentResolver.openFileDescriptor(ContentResolver.java:739)

@H_197_5@和:

@H_197_5@documentUri = “内容://com.android.externalstorage.documents/tree/9016-4EF8:MyFolder文件/文件/ 9016-4EF8:MyFolder文件/ file1.wav”

解决方法

@H_197_5@我认为这是一个bug,因为它应该在这里抛出一个FileNotFoundException.

@H_197_5@ @H_197_5@简单的解决方案是使用DocumentFile及其exists()方法.

@H_197_5@ @H_197_5@嗯,知道应该责怪谁是有帮助的.在这种情况下,问题在于Google.

@H_197_5@ @H_197_5@如果您愿意,当然欢迎您克隆其exists()的实现.礼貌的一些间接,你会发现它in DocumentsContractApi19

@H_197_5@
public static @R_675_8487@an exists(Context context,Uri self) {
    final ContentResolver resolver = context.getContentResolver();

    cursor c = null;
    try {
        c = resolver.query(self,new String[] {
                DocumentsContract.Document.columN_DOCUMENT_ID },null,null);
        return c.getCount() > 0;
    } catch (Exception E) {
        Log.w(tag,"Failed query: " + E);
        return false;
    } finally {
        closeQuietly(c);
    }
}

大佬总结

以上是大佬教程为你收集整理的android – 为什么ContentResolver.openFileDescriptor抛出IllegalArgumentException?出路?全部内容,希望文章能够帮你解决android – 为什么ContentResolver.openFileDescriptor抛出IllegalArgumentException?出路?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。