Matisse icon indicating copy to clipboard operation
Matisse copied to clipboard

升级到 Android 10,后调用Matisse崩溃 : Invalid column COUNT(*) AS count

Open JakePrim opened this issue 5 years ago • 17 comments

Describe the bug 升级到 Android 10,后调用Matisse崩溃 Invalid column COUNT(*) AS count To Reproduce Caused by: java.lang.IllegalArgumentException: Invalid column COUNT(*) AS count 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 androidx.core.content.ContentResolverCompat.query(ContentResolverCompat.java:81) at androidx.loader.content.CursorLoader.loadInBackground(CursorLoader.java:63) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:114) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:33) at androidx.loader.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48) at androidx.loader.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 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)  Expected behavior

Screenshots image Smartphone (please complete the following information):

  • Device: [e.g. Pixel 3 XL]
  • OS: [e.g. Android 29]
  • Version [29]

JakePrim avatar Sep 04 '19 06:09 JakePrim

还没有适配 Android 10 ,近期会支持一下。

REBOOTERS avatar Sep 04 '19 10:09 REBOOTERS

我也遇到了

vee-zhang avatar Sep 05 '19 07:09 vee-zhang

Just an additional note to all, if you intent to reproduce this problem in Android Q, which introduces scoped storage recently, you need to change Matisse library and Matisse sample's build.gradle, to both

compileSdkVersion 29 and targetSdkVersion 29

AlbumLoader.java My initial testing is that, Android Q is having problem in

  1. Using "COUNT(*) AS " + COLUMN_COUNT in PROJECTION
  2. Using GROUP BY in SELECTION

An op seem to have solution on these limitations - https://github.com/zhihu/Matisse/issues/646 However, the code formatting make it difficult to copy and paste directly for testing purpose. I may need to spend some time, to digest the idea behind the code as I'm not familiar with CursorLoader.

yccheok avatar Sep 11 '19 04:09 yccheok

同志好!

我尝试修复 Android Q 的臭虫。因为我对 CursorLoader 并不了解。如果你能找出更好的方案,请修正。

谢谢同志们!

这是我建议的代码

https://github.com/zhihu/Matisse/pull/665/commits/2c8f6f8647a1e7503dffa62bce2a59eaccd6e872

MediaStore.MediaColumns.DATA 已经 deprecated 了。可,我不知道应该用什么代替品。请同志留意 - https://stackoverflow.com/questions/57893449/what-is-the-replacement-for-deprecated-mediastore-mediacolumns-data-in-android-q

yccheok avatar Sep 11 '19 16:09 yccheok

因为 MediaStore.MediaColumns.DATA 已经 deprecated ,我建议把 AlbummCoverPath 转换成 mCoverUri

  • https://github.com/zhihu/Matisse/pull/665/commits/4cccb27fef84963643f1a261fb71f33512f823b7

我比较不确定的是,会不会在一些刁钻的状况,Uri.toString / Uri.parse 的相互转换会失败?

yccheok avatar Sep 11 '19 18:09 yccheok

I got the same crash on version 0.5.3-beta2, any idea when a fix will be added to the library?

JocelynDavid avatar Sep 28 '19 11:09 JocelynDavid

近期工作中的事情比较多,会抽空进行适配。

REBOOTERS avatar Oct 11 '19 01:10 REBOOTERS

可以暂时按照 issues 646 来改

Jocerly avatar Oct 14 '19 05:10 Jocerly

希望尽快适配Android 10

kilo-swodh avatar Nov 11 '19 01:11 kilo-swodh

希望尽快适配Android 10

https://github.com/zhihu/Matisse/releases/tag/v0.5.3-beta3 已经适配了呀。

REBOOTERS avatar Nov 11 '19 09:11 REBOOTERS

希望尽快适配Android 10

https://github.com/zhihu/Matisse/releases/tag/v0.5.3-beta3 已经适配了呀。

抱歉,已发现是我这边没适配好Android 10的外部存储限制

kilo-swodh avatar Nov 12 '19 06:11 kilo-swodh

api 'com.zhihu.android:matisse:0.5.3-beta3' 为啥编译不过

ERROR: Unable to resolve dependency for ':PhotoSdk@debug/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: PhotoSdk

ERROR: Unable to resolve dependency for ':PhotoSdk@debugAndroidTest/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: PhotoSdk

ERROR: Unable to resolve dependency for ':PhotoSdk@debugUnitTest/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: PhotoSdk

ERROR: Unable to resolve dependency for ':PhotoSdk@release/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: PhotoSdk

ERROR: Unable to resolve dependency for ':PhotoSdk@releaseUnitTest/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: PhotoSdk

ERROR: Unable to resolve dependency for ':App@debug/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: App

ERROR: Unable to resolve dependency for ':App@debugAndroidTest/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: App

ERROR: Unable to resolve dependency for ':App@debugUnitTest/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: App

ERROR: Unable to resolve dependency for ':App@release/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: App

ERROR: Unable to resolve dependency for ':App@releaseUnitTest/compileClasspath': Could not download matisse.aar (com.zhihu.android:matisse:0.5.3-beta3) Show Details Affected Modules: App

wlong800 avatar Nov 14 '19 02:11 wlong800

@JakePrim kilo-swodh

wlong800 avatar Nov 14 '19 02:11 wlong800

Same problem with Android 10 (pixel 4)

2020-03-26 20:32:13.820 1815-2067/[my project name] E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #1 Process: [my project name] , PID: 1815 java.lang.RuntimeException: An error occurred while executing doInBackground() at androidx.loader.content.ModernAsyncTask$3.done(ModernAsyncTask.java:164) 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 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 COUNT(*) AS count 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 androidx.core.content.ContentResolverCompat.query(ContentResolverCompat.java:81) at androidx.loader.content.CursorLoader.loadInBackground(CursorLoader.java:63) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:97) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:33) at androidx.loader.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48) at androidx.loader.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 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) 

serreau avatar Mar 26 '20 19:03 serreau

我遇到了类似的问题:(已经调整编译环境到buildVersion29) 2021-05-06 19:33:13.231 5150-5239/com.example.testmatisse E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #1 Process: com.example.testmatisse, PID: 5150 java.lang.RuntimeException: An error occurred while executing doInBackground() at androidx.loader.content.ModernAsyncTask$3.done(ModernAsyncTask.java:164) 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 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 COUNT(*) AS count 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:946) at android.content.ContentResolver.query(ContentResolver.java:881) at androidx.core.content.ContentResolverCompat.query(ContentResolverCompat.java:81) at androidx.loader.content.CursorLoader.loadInBackground(CursorLoader.java:63) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:97) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:33) at androidx.loader.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48) at androidx.loader.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 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) 

compileSdkVersion 29 defaultConfig { applicationId 'com.example.testmatisse' minSdkVersion 14 targetSdkVersion 29 versionCode 1 versionName "1.0" }

另外,我运行Demo时没有出问题,但是我已经基本保持和Demo一致的环境了,唯一不同就是依赖方式了。

baizhu0414 avatar May 06 '21 11:05 baizhu0414

我遇到了类似的问题:(已经调整编译环境到buildVersion29) 2021-05-06 19:33:13.231 5150-5239/com.example.testmatisse E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #1 Process: com.example.testmatisse, PID: 5150 java.lang.RuntimeException: An error occurred while executing doInBackground() at androidx.loader.content.ModernAsyncTask$3.done(ModernAsyncTask.java:164) 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 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 COUNT(*) AS count 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:946) at android.content.ContentResolver.query(ContentResolver.java:881) at androidx.core.content.ContentResolverCompat.query(ContentResolverCompat.java:81) at androidx.loader.content.CursorLoader.loadInBackground(CursorLoader.java:63) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:97) at com.zhihu.matisse.internal.loader.AlbumLoader.loadInBackground(AlbumLoader.java:33) at androidx.loader.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60) at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48) at androidx.loader.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 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) 

compileSdkVersion 29 defaultConfig { applicationId 'com.example.testmatisse' minSdkVersion 14 targetSdkVersion 29 versionCode 1 versionName "1.0" }

另外,我运行Demo时没有出问题,但是我已经基本保持和Demo一致的环境了,唯一不同就是依赖方式了。

抱歉,我修改到0.5.3-beta后此问题解决。请问为什么没有0.5.3正式版呢?是问题没有彻底解决吗?

baizhu0414 avatar May 07 '21 01:05 baizhu0414

有临时解决方案吗?项目用的是源码依赖的方式,没法直接升级……

DanteAndroid avatar Nov 25 '22 02:11 DanteAndroid