简体   繁体   English

Android Q (SDK 29) 上的 ContentResolver 无效列错误

[英]ContentResolver invalid column error on Android Q (SDK 29)

Our Android application relies heavily on queries on the ContentResolver to get and manage photos and videos stored on the device.我们的 Android 应用程序严重依赖 ContentResolver 上的查询来获取和管理存储在设备上的照片和视频。 We are aware of the obvious changes in Android Q regarding the DATA fields and the scoped storage.我们知道 Android Q 关于 DATA 字段和范围存储的明显变化。 However, we experience some weird issues on our Pixel 2 for queries, that use more complex expressions in the SQL projection.但是,我们在查询的 Pixel 2 上遇到了一些奇怪的问题,这些问题在 SQL 投影中使用了更复杂的表达式。 For example we do something like this:例如我们做这样的事情:

final String[] projection = {MediaStore.MediaColumns._ID,
                                     MediaStore.MediaColumns.DATA,
                                     MediaStore.MediaColumns.MIME_TYPE,
                                     getDateColumn(target, sortMode),
                                     MediaStore.MediaColumns.TITLE,
                                     "rtrim(" + MediaStore.MediaColumns.DATA + ", replace(" +
                                     MediaStore.MediaColumns.DATA + ", '/', '')) as " + COLUMN_DIRECTORY,
                                     "substr(" + MediaStore.MediaColumns.DATA + ", " + "length(rtrim(" +
                                     MediaStore.MediaColumns.DATA + ", replace(" + MediaStore.MediaColumns.DATA +
                                     ", '/', '')) )" + ")" + "as " + COLUMN_FILENAME,
                                     MediaStore.MediaColumns.DISPLAY_NAME,
                                     MediaStore.MediaColumns.DATE_ADDED};

Which used to work absolutely fine up until now.到目前为止,它一直工作得很好。 On the latest Android Q version however, we get the following exception for every query that uses projections that are not the pure column names:然而,在最新的 Android Q 版本上,对于使用非纯列名的投影的每个查询,我们都会遇到以下异常:

2019-09-26 15:54:56.733 30276-30659/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
    Process: xxxx, PID: 30276
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$4.done(AsyncTask.java:399)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.IllegalArgumentException: Invalid column rtrim(_data, replace(_data, '/', '')) as directory
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
        at android.content.ContentResolver.query(ContentResolver.java:944)
        at android.content.ContentResolver.query(ContentResolver.java:880)
        at android.content.ContentResolver.query(ContentResolver.java:836)
        ...

Are these kind of projections forbidden now?现在禁止这种投影吗? Or are we missing something?还是我们错过了什么? Thanks in advance!提前致谢!

you can't access anymore to DATA column您无法再访问DATA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误升级 sdk 29 为 android 10-Q 从 android 9-Pie 后构建应用程序没有响应 - Error upgrade sdk 29 for android 10-Q from android 9-Pie after building app not responding MediaStore contentResolver.insert() 在拍照时创建副本而不是替换现有文件(Android Q:29) - MediaStore contentResolver.insert() creates copies instead of replacing the existing file when taking photos (Android Q: 29) Android:ContentResolver查询中的无效列数(*) - Android: Invalid column count(*) in ContentResolver query() 是否可以以编程方式访问 Android Q(SDK >= 29)上的下载文件夹? - Is it possible to programmatically access Download folder on Android Q (SDK >= 29)? Android ACTIVITY_RECOGNITION 权限 SDK 28 在 Android 10/Q(SDK 29)上运行 - Android ACTIVITY_RECOGNITION Permission SDK 28 running on Android 10/Q (SDK 29) Robolectric 和 Android SDK 29 - Robolectric and Android SDK 29 FFMPEG 命令在设置项目的目标 SDK 版本 29 时不起作用(Android Q 问题) - FFMPEG command is not Working when set project's target SDK version 29(Android Q issue) 在 android 10 sdk29 上下载 ionic 3 文件时出错 - Getting error in file download ionic 3 on android 10 sdk29 Android 29/Q 上的 MediaScanner scanFile / CameraRoll 的替代方案 - Alternative for MediaScanner scanFile / CameraRoll on Android 29/Q android google play billing library v2.0.3acknowledgePurchase failed with error code 5 in Android Q (api 29) - android google play billing library v2.0.3 acknowledgePurchase failed with error code 5 in Android Q (api 29)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM