使用 CursorLoader 查询目录

2024-03-23

所以这让我忙了一整天。

我正在自定义一个画廊,用户可以在其中选择一个或多个图像,我正在使用一个现有项目,该项目利用CursorLoader。几乎每个项目都使用媒体库 URI 来查询内存中的所有图像。但是,我只想扫描特定目录并显示其中的图像。

几行代码可以部分实现我想要的功能:

final String imagesDirectory = "/storage/sdcard0/DCIM/"
String selection = MediaStore.Images.Media.DATA + " LIKE '" + imagesDirectory + "%'";
cl = new CursorLoader(MultiImageChooserActivity.this, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, img.toArray(new String[img.size()]), selection, null, null);

我也在 SO 上找到了该代码的选择部分,但它还检索了子目录中的所有图像,这是我不想要的。解决方案可能是检查是否MediaStore.Images.Media.DATA列包含相同数量的斜杠imagesDirectory,应该有效:

imagesDirectory: /storage/sdcard0/DCIM/                   -> 4
/storage/sdcard0/DCIM/photo.jpg                           -> 4, direct child
/storage/sdcard0/DCIM/subdir/otherphoto.jpg               -> 5, in subdir

我发现在 SQLite 中,这样的查询应该可以工作(检查/):

SELECT LENGTH(col) - LENGTH(REPLACE(col, '/', ''))

其中col应该MediaStore.Images.Media.DATA,但到目前为止我已经尝试了很多不同的selection变体,但我还没有设法过滤数据。既然你不能给CursorLoader a rawQuery(像一个Cursor),我也做不到。

我尝试的另一件事是不使用MediaStore.Images.Media.EXTERNAL_CONTENT_URI作为内容 URI,而是来自目录的 URI。所以我尝试了这个:

final String imagesDirectory = "/storage/sdcard0/DCIM/"
cl = new CursorLoader(MultiImageChooserActivity.this, 
    Uri.fromFile(new File(imagesDirectory)), 
    img.toArray(new String[img.size()]), null, null, null);

但至今无济于事。

问题:如何使用 a 查询目录中的所有图像,但不查询其子目录中的所有图像CursorLoader?

我不是 SQLite、查询和方面的英雄CursorLoaders,这样也许可以解释一点。另外,我确实搜索了类似的问题,但在这个特定主题上没有太多可找到的。甚至谷歌搜索directory cursorloader不回答任何问题。大多数结果都是关于按目录排序的帖子......

提前致谢。


我设法通过使用扩展子句来实现它:

String where = "_data LIKE '/storage/sdcard0/DCIM/%' AND (SELECT LENGTH(_data) - LENGTH(REPLACE(_data, '/', ''))) = 4";

where /storage/sdcard0/DCIM/是我的图像目录和4是图像目录名称中斜杠的数量。我已经在几个不同的目录上尝试过这个(并手动检查它们),它似乎工作得很好。

我也会尝试 pskinks 方法(DATA like [dir]/%.jpg and DATA not like [dir]/%/%),并报告结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CursorLoader 查询目录 的相关文章

随机推荐

  • SQL Server 是否优化 LIKE ('%%') 查询?

    我有一个存储过程 它对记录执行搜索 问题是一些来自 UI 的搜索条件可能是空字符串 因此 当未指定条件时 LIKE 语句就变得多余 如何有效地执行该搜索或 Sql Server 或者 它是否优化 LIKE 查询 因为这意味着没有什么可比较的
  • 数据点更改后插入行

    我有一个数据集 如下所示 This1 GH This2 GH This3 GH This4 BR This5 BR This6 VB 当数据点发生变化时 即 GH 变为 BR 时 我希望 Excel 插入换行符 所以最终的数据看起来像这样
  • 在下载管理器中,如何在通知栏“取消”时获取状态?

    我正在使用下载管理器在 Android 中下载文件 但是 当点击通知栏上的 取消 按钮时 我无法收到任何广播 我只找到两个广播 1 DownloadManager ACTION DOWNLOAD COMPLETE 2 DownloadMan
  • 使用 Bootstrap 2 将某些地方的字形颜色更改为蓝色,但不是全部地方

    我的 UI 使用 Bootstrap 框架 我想将字形的颜色更改为蓝色 但不是在所有地方 在某些地方它应该使用默认颜色 我已经参考了这两个链接 但没有发现任何有用的信息 我可以仅使用 CSS 为 bootstrap 图标添加颜色吗 http
  • 动态更改母版页中的菜单类别

    我如何更改母版页中菜单的 CSS 类名称 子页面 当菜单的任何子形式打开时 我想将类更改为 活动 有可用的 C 或 JavaScript 代码吗 Thanks 通过理解你的问题 我认为你想在页面更改时更改 li 的类或菜单中使用的任何标签
  • Ms Access 是 DBMS 还是 RDBMS?

    Ms Access 是 DBMS 还是 RDBMS 我也在谷歌上找到这个问题的答案 但在一些网站或博客中说它是DBMS 而另一些则说它是RDBMS 那么正确答案是什么 请理解为什么是 DBMS 或 RDBMS 简答 Both Detail
  • 在嵌套的 If 中应用两个条件或与 And 一起使用单个条件哪个更好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 嵌套 If 或单个 if 与 And 运算符 哪个是更好的方法 单个 If 与 And if txtPackage Text string Em
  • GWT 程序是否有办法判断它是处于托管模式还是 Web 模式?

    我希望我的 GWT 程序能够确定它是处于托管模式还是 Web 模式 有没有办法做到这一点 Thanks GWT isScript 在非托管模式下返回 true 在托管模式下返回 false http google web toolkit g
  • QThread 正在造成内存泄漏

    经过对我的 QT 应用程序进行大量测试和更改后 Visual Leak Detector 识别出了令人讨厌的泄漏源 8 字节 VLD 报告 QT 应用程序是干净的 除了QThread 指针 一些实现背景 该应用程序由 Jeffrey Hol
  • Gunicorn 无法加载 Flask 应用程序

    我有一个 Flask 应用程序 我试图通过 Gunicorn 提供服务 我正在使用 virtualenv 和 python3 如果我将 venv cd 激活到我的应用程序基目录 然后运行 gunicorn mysite app I get
  • LLblgen:选择不同的?

    我似乎无法弄清楚如何在 Llblgen 2 6 自助服务模型中仅选择不同的条目 我本质上想要这个查询 select distinct City from peopleTable where predicates 我已经有了 PeopleCo
  • myProject.sqlite 位于 Lion OSX Xcode 4.1 中的哪里?

    我无法在 OS 10 7 中找到我的核心数据 sqlite 文件 你们中有人知道如何找到它吗 谢谢 卡斯帕 它与以前的 ios 版本保存在同一位置 但是 Library 文件夹被 Finder 标志隐藏 您可以撤消此标志以使其再次可见 为此
  • socket.accept() 挂起我的程序

    我正在尝试创建可以通过 python 中的套接字进行通信的应用程序 我已经能够在控制台程序中实现这一点 并尝试在 WPF 中执行相同的操作 这是一个非常简单的程序 应该充当服务器 其中创建套接字 绑定到端口 然后侦听连接 我现在面临的问题是
  • 如何在 if 语句中将一个值与“NaN”进行比较:Python 3.5.2 | Anaconda 4.1.0(64 位)例如:a!=Nan,其中 a 是浮点值

    for r in range 65000 for c in range 8 if df1 iloc r c NaN k k 1 df iloc k 3 df1 iloc r c else print Nan Detected l l 1 p
  • 如何使用 GitLab 和 Jenkins 设置 Protractor

    如果有人尝试过将 Protractor 与 Jenkins 集成 请告诉我 Regards Manan 与 jenkins 的集成相对简单 最大的障碍是确保安装了 Jenkins 的盒子是最新的并且拥有所需的资源 如果你想在 Firefox
  • 使用 json.stringify 的 MVC3 控制器 null 参数

    我有一个非常简单的控制器方法 它接受 Guid 参数 如下所示 public JsonResult GetById Guid id var results from a in repository AsQueryable
  • 如何在 C# 中将两个表单附加在一起? [复制]

    这个问题在这里已经有答案了 可能的重复 如何 停靠 附加 winforms 表单 https stackoverflow com questions 1238503 how to dock attach winforms forms 我有两
  • 如何使用 EWS Java API(Exchange Web 服务)设置联系人头衔?

    我想实现与这个问题完全相同的事情 但是在java中 如何使用 Exchange Web 服务托管 API 设置联系人头衔 https stackoverflow com questions 4863364 how to set the co
  • 越南语字符的正则表达式

    我有一个字符串 想要删除以下任何情况下都不存在的任何字符 不在此列表中 不在 a z 0 9 A Z 中 不是 和空格 谁能帮我解决 php 中的这个正则表达式 试试这个正则表达式 a z0 9A Z u The u修饰语 http
  • 使用 CursorLoader 查询目录

    所以这让我忙了一整天 我正在自定义一个画廊 用户可以在其中选择一个或多个图像 我正在使用一个现有项目 该项目利用CursorLoader 几乎每个项目都使用媒体库 URI 来查询内存中的所有图像 但是 我只想扫描特定目录并显示其中的图像 几