[英]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.