- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有两个问题,这里用一段简短的代码来说明我的问题:
ContentResolver resolver = context.getContentResolver();
DocumentsContract.deleteDocument(resolver, documentUri);
resolver.openFileDescriptor(documentUri, "rw");
文档说最后一行“Throws FileNotFoundException if no file exists under the URI or the mode is invalid.”
但实际上我得到了 java.lang.IllegalArgumentException
。
(问题 1)这是错误还是正常?
(问题 2)openFileDescriptor()
显然不是测试文档是否存在的好方法。执行此操作的“官方”方法是什么?
编辑(添加错误日志):
W/System.err:java.lang.IllegalArgumentException:无法确定 9016-4EF8:myFolder/file1.wav 是否是 9016-4EF8:myFolder 的子项:java.io.FileNotFoundException:9016-4EF8 缺少文件: myFolder/file1.wav 位于/storage/extSdCard/myFolder/file1.wav
W/System.err:在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
W/System.err:在 android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:148)
W/System.err:在 android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:618)
W/System.err:在 android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:945)
W/System.err:在 android.content.ContentResolver.openFileDescriptor(ContentResolver.java:784)
W/System.err:在 android.content.ContentResolver.openFileDescriptor(ContentResolver.java:739)
和:
documentUri="content://com.android.externalstorage.documents/tree/9016-4EF8%3AmyFolder/document/9016-4EF8%3AmyFolder%2Ffile1.wav"
最佳答案
Is this a bug or OK?
我认为这是一个错误,因为它应该在此处抛出 FileNotFoundException
。
openFileDescriptor() is obviously not a good method to test if the document exists. What is the "official" method to do that?
简单的解决方案是使用DocumentFile
及其exists()
方法。
If I'm able to remove the document identified by documentUri without any problem then the nature of the actual document shouldn't be relevant for openFileDescriptor, should it?
嗯,知道应该责怪谁是有帮助的。在这种情况下,问题在于 Google。
And concerning DocumentFile: I successfully avoided it and wonder if I'm now forced to include it only because of exists()?
当然欢迎您克隆其 exists()
的实现,如果您愿意的话。通过一些间接的方式,你会发现它 in DocumentsContractApi19
:
public static boolean 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, null);
return c.getCount() > 0;
} catch (Exception e) {
Log.w(TAG, "Failed query: " + e);
return false;
} finally {
closeQuietly(c);
}
}
关于android - 为什么 ContentResolver.openFileDescriptor 抛出 IllegalArgumentException?出路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393130/
我正在尝试根据显示名称过滤文档。这是代码: val files = ArrayList(0) val uri = DocumentsContract.buildChildDocumentsUriUsi
如果 ContentResolver.addPeriodicSync 没有触发 onPerformSync(...) 方法,可能是什么问题。 但是 ContentResolver.requestSyn
我正在 Udacity 上学习 Android 类(class),并且遇到了一位学习者在标题中提出的问题。 Youtube link to lesson 引用自视频: ContentResolver
我是安卓领域的新手,正处于学习阶段。我有几个疑问: 每个应用程序是否有一个 ContentResolver 对象? 它是一个单例对象吗? 谁管理这个对象生命周期? 如果是单例,它如何处理多个查询 Co
我使用此代码通过 documentFile.createFile() 复制图像 private void newcopyFile(File fileInput, String outputParent
我在尝试删除具有特定 ID 的一行数据时遇到问题,而不是通过内容提供程序删除我数据库中的所有数据。 这里是删除内容提供者的方法: @Override public int delete(@No
我想查询用户选择的图片或视频的数据。我的 onActivityResult 查询具有给定 URI 的图像的数据字段。 protected final String[] queryColumns = {
当我使用原始的 Google 音乐播放器时,我的应用程序运行良好。它找到了歌曲和播放列表,没问题。自从我开始使用 Play Music 以来,我的应用程序找不到任何这些。这是我的代码: Cur
我的内容 uri 有一个取决于内容的路径,例如content://controller/ContentItem/0/Favorites/RecentlyPlayed 我观察到,当我用这个 uri 插入
我正在使用指定的代码 here存储 Bitmap 图像并将其显示到图库中。 不幸的是,该代码让我可以将图像存储到“图片”文件夹中的图库中。 是否可以使用我决定的名称更改文件夹名称? 最佳答案 好的,我
我几乎完成了我的应用程序......但现在我不能像这样使用 ContentResolver: Bitmap imageBitmap = MediaStore.Images.Media.getBitma
我们都知道 ContentResolver 查询不应该在 UI 线程上执行,但是,令人惊讶的是,我找不到关于 ContentResolver 类线程安全的信息官方文档。 我知道如何编写线程安全的 Co
执行insert new data into content provider时报错,看下面代码,PS,我直接把下面代码放到Activity的onCreate()中,然后执行。 ContentValu
我将文件添加到 Documents/MyExcelsFolder通过使用 ContentResolver.insert然后还将新文件添加到 Documents/MyExcelsFolder另一个应用程
我有这个更新代码: public Boolean update() { try { data.put(ContactsContract.Groups.SHOULD_SYNC, true);
根据this文档强制执行至少 60 分钟,但根据 this回答是60秒。正确的最小 pollFrequency 是多少? 最佳答案 最后,在我的应用程序上进行试验后,我能够每分钟同步一次,因此 and
我想删除我手机上的所有短信,但每次对话的最后 500 条短信除外。这是我的代码,但速度很慢(删除一条短信大约需要 10 秒)。我如何加速这段代码: ContentResolver cr = g
我有一个覆盖 bulkInsert() 的 MyContentProvider 类。在此方法中,我使用 SQLite 事务将大约 4,000 行插入数据库,这在三星 Galaxy S4 设备上大约需要
我正在使用 Cursor 从图库中获取图像并从图库中获取所有图像,有什么方法可以只获取最近拍摄的几张图像,例如最近拍摄的 20 张图像。 还有一个问题,我面临的是图像从旧到新的顺序,我想以相反的顺序(
我正在使用以下代码在设备上构建电子邮件地址列表以显示在 ListActivity 上。目前我可以正常检索电子邮件地址,但它们以以下形式出现:null (email@address.com) 而不是 n
我是一名优秀的程序员,十分优秀!