Scoped Storage 在安卓 10.0 中引入。

huangapple go评论95阅读模式
英文:

Scoped Storage android 10.0

问题

  1. Crash is here......
  2. android.database.sqlite.SQLiteException: near "GROUP": syntax error (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT _id, bucket_display_name, bucket_id, _id, orientation FROM images WHERE ((is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' ))) AND ((1) GROUP BY 1,(2)) ORDER BY date_modified DESC, (OS error - 2:No such file or directory)
  3. at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184)
  4. at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
  5. at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
  6. at android.content.ContentResolver.query(ContentResolver.java:955)
  7. at android.content.ContentResolver.query(ContentResolver.java:891)
  8. at android.content.ContentResolver.query(ContentResolver.java:840)
  9. Below is method to show all folders or album of images.
  10. private boolean logGalleryFolders() {
  11. this.albumList = new ArrayList<>();
  12. List<Integer> bucketIdList = new ArrayList<>();
  13. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{"_id", "bucket_display_name", "bucket_id", "_id", "orientation"}, "1) GROUP BY 1,(2", null, "date_modified DESC");
  14. List<GridViewItem> items;
  15. int i;
  16. if (cur == null || !cur.moveToFirst()) {
  17. items = new ArrayList<>();
  18. for (i = 0; i < this.albumList.size(); i++) {
  19. items.add(new GridViewItem(this.activity, this.albumList.get(i).name, BuildConfig.FLAVOR + this.albumList.get(i).imageIdList.size(), true, this.albumList.get(i).imageIdForThumb, this.albumList.get(i).orientationList.get(0).intValue()));
  20. }
  21. this.albumList.add(new Album());
  22. this.albumList.get(this.albumList.size() - 1).gridItems = items;
  23. for (i = 0; i < this.albumList.size() - 1; i++) {
  24. this.albumList.get(i).gridItems = createGridItemsOnClick(i);
  25. }
  26. if (cur != null) {
  27. cur.close();
  28. }
  29. return true;
  30. }
  31. int bucketColumn = cur.getColumnIndex("bucket_display_name");
  32. int bucketId = cur.getColumnIndex("bucket_id");
  33. int imageId = cur.getColumnIndex("_id");
  34. int orientationColumnIndex = cur.getColumnIndex("orientation");
  35. do {
  36. Album album = new Album();
  37. int id = cur.getInt(bucketId);
  38. album.ID = id;
  39. if (bucketIdList.contains(id)) {
  40. Album albumFromList = this.albumList.get(bucketIdList.indexOf(album.ID));
  41. albumFromList.imageIdList.add(cur.getLong(imageId));
  42. albumFromList.orientationList.add(cur.getInt(orientationColumnIndex));
  43. } else {
  44. String bucket = cur.getString(bucketColumn);
  45. bucketIdList.add(id);
  46. album.name = bucket;
  47. album.imageIdForThumb = cur.getLong(imageId);
  48. album.imageIdList.add(album.imageIdForThumb);
  49. this.albumList.add(album);
  50. album.orientationList.add(cur.getInt(orientationColumnIndex));
  51. }
  52. } while (cur.moveToNext());
  53. items = new ArrayList<>();
  54. for (i = 0; i < this.albumList.size(); i++) {
  55. items.add(new GridViewItem(this.activity, this.albumList.get(i).name, BuildConfig.FLAVOR + this.albumList.get(i).imageIdList.size(), true, this.albumList.get(i).imageIdForThumb, this.albumList.get(i).orientationList.get(0).intValue()));
  56. }
  57. this.albumList.add(new Album());
  58. this.albumList.get(this.albumList.size() - 1).gridItems = items;
  59. for (i = 0; i < this.albumList.size() - 1; i++) {
  60. this.albumList.get(i).gridItems = createGridItemsOnClick(i);
  61. }
  62. cur.close();
  63. return true;
  64. }
  65. Below is crash line......
  66. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{"_id", "bucket_display_name", "bucket_id", "_id", "orientation"}, "1) GROUP BY 1,(2", null, "date_modified DESC");
英文:

Crash is here......

android.database.sqlite.SQLiteException: near "GROUP": syntax error (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT _id, bucket_display_name, bucket_id, _id, orientation FROM images WHERE ((is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' ))) AND ((1) GROUP BY 1,(2)) ORDER BY date_modified DESC, (OS error - 2:No such file or directory)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
at android.content.ContentResolver.query(ContentResolver.java:955)
at android.content.ContentResolver.query(ContentResolver.java:891)
at android.content.ContentResolver.query(ContentResolver.java:840)

Below is method to show all folders or album of images.

  1. private boolean logGalleryFolders() {
  2. this.albumList = new ArrayList&lt;&gt;();
  3. List&lt;Integer&gt; bucketIdList = new ArrayList&lt;&gt;();
  4. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{&quot;_id&quot;, &quot;bucket_display_name&quot;, &quot;bucket_id&quot;, &quot;_id&quot;, &quot;orientation&quot;}, &quot;1) GROUP BY 1,(2&quot;, null, &quot;date_modified DESC&quot;);
  5. List&lt;GridViewItem&gt; items;
  6. int i;
  7. if (cur == null || !cur.moveToFirst()) {
  8. items = new ArrayList&lt;&gt;();
  9. for (i = 0; i &lt; this.albumList.size(); i++) {
  10. items.add(new GridViewItem(this.activity, this.albumList.get(i).name, BuildConfig.FLAVOR + this.albumList.get(i).imageIdList.size(), true, this.albumList.get(i).imageIdForThumb, this.albumList.get(i).orientationList.get(0).intValue()));
  11. }
  12. this.albumList.add(new Album());
  13. this.albumList.get(this.albumList.size() - 1).gridItems = items;
  14. for (i = 0; i &lt; this.albumList.size() - 1; i++) {
  15. this.albumList.get(i).gridItems = createGridItemsOnClick(i);
  16. }
  17. if (cur != null) {
  18. cur.close();
  19. }
  20. return true;
  21. }
  22. int bucketColumn = cur.getColumnIndex(&quot;bucket_display_name&quot;);
  23. int bucketId = cur.getColumnIndex(&quot;bucket_id&quot;);
  24. int imageId = cur.getColumnIndex(&quot;_id&quot;);
  25. int orientationColumnIndex = cur.getColumnIndex(&quot;orientation&quot;);
  26. do {
  27. Album album = new Album();
  28. int id = cur.getInt(bucketId);
  29. album.ID = id;
  30. if (bucketIdList.contains(id)) {
  31. Album albumFromList = this.albumList.get(bucketIdList.indexOf(album.ID));
  32. albumFromList.imageIdList.add(cur.getLong(imageId));
  33. albumFromList.orientationList.add(cur.getInt(orientationColumnIndex));
  34. } else {
  35. String bucket = cur.getString(bucketColumn);
  36. bucketIdList.add(id);
  37. album.name = bucket;
  38. album.imageIdForThumb = cur.getLong(imageId);
  39. album.imageIdList.add(album.imageIdForThumb);
  40. this.albumList.add(album);
  41. album.orientationList.add(cur.getInt(orientationColumnIndex));
  42. }
  43. } while (cur.moveToNext());
  44. items = new ArrayList&lt;&gt;();
  45. for (i = 0; i &lt; this.albumList.size(); i++) {
  46. items.add(new GridViewItem(this.activity, this.albumList.get(i).name, BuildConfig.FLAVOR + this.albumList.get(i).imageIdList.size(), true, this.albumList.get(i).imageIdForThumb, this.albumList.get(i).orientationList.get(0).intValue()));
  47. }
  48. this.albumList.add(new Album());
  49. this.albumList.get(this.albumList.size() - 1).gridItems = items;
  50. for (i = 0; i &lt; this.albumList.size() - 1; i++) {
  51. this.albumList.get(i).gridItems = createGridItemsOnClick(i);
  52. }
  53. cur.close();
  54. return true;
  55. }

Below is crash line......

  1. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{&quot;_id&quot;, &quot;bucket_display_name&quot;, &quot;bucket_id&quot;, &quot;_id&quot;, &quot;orientation&quot;}, &quot;1) GROUP BY 1,(2&quot;, null, &quot;date_modified DESC&quot;);

答案1

得分: 1

只需将查询更改为以下内容:

  1. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{&quot;_id&quot;, &quot;bucket_display_name&quot;, &quot;bucket_id&quot;, &quot;_id&quot;, &quot;orientation&quot;}, &quot;1) GROUP BY 1,(2&quot;, null, &quot;date_modified DESC&quot;);

  1. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{&quot;_id&quot;, &quot;bucket_display_name&quot;, &quot;bucket_id&quot;, &quot;_id&quot;, &quot;orientation&quot;}, null, null, &quot;date_modified DESC&quot;);
英文:

Just change the query like below:

From

  1. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{&quot;_id&quot;, &quot;bucket_display_name&quot;, &quot;bucket_id&quot;, &quot;_id&quot;, &quot;orientation&quot;}, &quot;1) GROUP BY 1,(2&quot;, null, &quot;date_modified DESC&quot;);

To

  1. Cursor cur = this.context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{&quot;_id&quot;, &quot;bucket_display_name&quot;, &quot;bucket_id&quot;, &quot;_id&quot;, &quot;orientation&quot;}, null, null, &quot;date_modified DESC&quot;);

答案2

得分: 0

您的 GROUP BY 出现在 AND 内导致了问题。请将您的 query 修改如下:

  1. SELECT
  2. _id,
  3. bucket_display_name,
  4. bucket_id,
  5. _id,
  6. orientation
  7. FROM
  8. images
  9. WHERE
  10. (
  11. (is_pending = 0)
  12. AND (is_trashed = 0)
  13. AND (volume_name IN ('external_primary'))
  14. )
  15. AND ((1))
  16. GROUP BY
  17. 1, 2
  18. ORDER BY
  19. date_modified DESC
英文:

Your GROUP BY comes inside the And makes the issue. Please change your query as below:

  1. SELECT
  2. _id,
  3. bucket_display_name,
  4. bucket_id,
  5. _id,
  6. orientation
  7. FROM
  8. images
  9. WHERE
  10. (
  11. (is_pending = 0)
  12. AND (is_trashed = 0)
  13. AND (volume_name IN (&#39;external_primary&#39;))
  14. )
  15. AND ((1))
  16. GROUP BY
  17. 1,(2)
  18. ORDER BY
  19. date_modified DESC

huangapple
  • 本文由 发表于 2020年9月16日 12:34:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/63913196.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定