![](/img/trans.png)
[英]Error upgrade sdk 29 for android 10-Q from android 9-Pie after building app not responding
[英]ContentResolver invalid column error on Android Q (SDK 29)
我们的 Android 应用程序严重依赖 ContentResolver 上的查询来获取和管理存储在设备上的照片和视频。 我们知道 Android Q 关于 DATA 字段和范围存储的明显变化。 但是,我们在查询的 Pixel 2 上遇到了一些奇怪的问题,这些问题在 SQL 投影中使用了更复杂的表达式。 例如我们做这样的事情:
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};
到目前为止,它一直工作得很好。 然而,在最新的 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)
...
现在禁止这种投影吗? 还是我们错过了什么? 提前致谢!
您无法再访问DATA
列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.