Android 使用游标装入器查询目录
这让我忙了一整天 我正在自定义一个图库,用户可以在其中选择一个或多个图像,我正在使用使用Android 使用游标装入器查询目录,android,sqlite,android-cursorloader,Android,Sqlite,Android Cursorloader,这让我忙了一整天 我正在自定义一个图库,用户可以在其中选择一个或多个图像,我正在使用使用游标加载程序的现有项目。几乎每个项目都使用媒体库URI来查询内存中的所有图像。但是,我只希望扫描一个特定的目录,并显示其中的图像 几行代码部分满足了我的要求: final String imagesDirectory = "/storage/sdcard0/DCIM/" String selection = MediaStore.Images.Media.DATA + " LIKE '" + imagesDi
游标加载程序的现有项目。几乎每个项目都使用媒体库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);
我在上面找到的代码的选择部分也是如此,但它也检索子目录中的所有图像,这是我不想要的。一种解决方案是检查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中,这样的查询应该可以工作(检查/
的出现情况):
其中的col
应该是MediaStore.Images.Media.DATA
,但到目前为止,我已经尝试了许多不同的选择
变体,但我还没有成功地过滤数据。既然你不能给游标加载程序一个rawQuery
(就像游标
),我也不能这样做
我尝试的另一件事是不使用MediaStore.Images.Media.EXTERNAL\u CONTENT\u 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);
但是没有用,苏斯法
问题:如何使用游标装入器查询目录中的所有图像,而不是其子目录?
对于SQLite、查询和游标加载程序
,我不是英雄,所以这可以解释一点。此外,我也搜索过类似的问题,但在这个特定的主题上没有太多可找到的。甚至谷歌搜索目录游标加载程序也不能回答任何问题。大多数结果都是关于按目录排序的帖子
提前谢谢。我使用了一个扩展子句成功地完成了它:
String where = "_data LIKE '/storage/sdcard0/DCIM/%' AND (SELECT LENGTH(_data) - LENGTH(REPLACE(_data, '/', ''))) = 4";
其中/storage/sdcard0/DCIM/
是我的映像目录,4
是映像目录名称中的斜杠数量。我在几个不同的目录上尝试过这个方法(并手动检查它们),它似乎工作得很好
我也会尝试pskinks方法(像[dir]/%.jpg这样的数据和不像[dir]/%/%
)的数据),并报告结果。它必须是游标加载程序吗?您使用的是什么库及其输入参数(uri、游标等)?@pskink是的,它必须是游标加载程序。我可以用游标来完成这个任务,但是我使用了一个GitHub项目,它使用了游标加载程序,所以我不能使用其他任何东西。画廊只是一个带有ImageView的GridView。参数显示在我的第一个代码块中(或者我理解不正确),请给我一个指向该github的链接project@pskink如果我是你,我会编写自定义ContentProvider,其中query()方法返回游标,gallery的游标加载程序可以使用该ContentProvider
String where = "_data LIKE '/storage/sdcard0/DCIM/%' AND (SELECT LENGTH(_data) - LENGTH(REPLACE(_data, '/', ''))) = 4";