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

Created on 4 Sep 2019  ·  14Comments  ·  Source: zhihu/Matisse

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]
bug

Most helpful comment

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

All 14 comments

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

我也遇到了

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.

同志好!

我尝试修复 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

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

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

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

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

可以暂时按照 issues 646 来改

希望尽快适配Android 10

希望尽快适配Android 10

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

希望尽快适配Android 10

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

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

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

@JakePrim kilo-swodh

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) 

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Freedomhxb picture Freedomhxb  ·  4Comments

souragar picture souragar  ·  4Comments

liuzhanta picture liuzhanta  ·  5Comments

zouzhenglu picture zouzhenglu  ·  4Comments

xiaotianchang picture xiaotianchang  ·  4Comments