【问题标题】:How to get a selection of tracks using the duration range如何使用持续时间范围选择曲目
【发布时间】:2015-12-08 16:13:03
【问题描述】:

我正在尝试使用持续时间范围选择曲目。 比如

String start = null;
String end = null;
if (criteria == getString(R.string.uptofivemins)) {
    start = "0";
    end = "300000";
}
String[] crit =  {start,end};
String where = "duration >= ? AND duration < ? ";
//.... 


private final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
private final String duration = MediaStore.Audio.Media.DURATION;
//etc...
cr.query(uri, columns, where, crit, null);

问题似乎是因为我需要输入字符串开始和结束,结果查询将使用这些执行。然而,数据库字段“duration”是 int 类型,从返回的结果中我怀疑比较是针对字符串而不是 int,因此选择不正确。 任何对如何使用持续时间范围(例如

【问题讨论】:

  • 'criteria' 似乎是字符串类型。如果是这样,为什么不使用 'String.equals()' 进行比较?
  • 此外,如果需要,您可以将字符串转换为整数,将整数转换为字符串。使用String.valueOf(int)Integer.parseInt(string)
  • 我熟悉这些方法,但问题在于将值传递给查询。 crit 只接受字符串而不是 int 。
  • 1.很好,您更改了查询(“crit”而不是“criteria”) - 我几乎可以肯定这只是一个错字 2. 根据我自己的经验,将 {"5", "30"} 提供给 a 没有问题询问。如果相应的列被声明为数字,则数据库会将输入读取为数字。所以如果你得到意想不到的结果,我仍然怀疑比较 (criteria == getString(R.string.uptofivemins) ) 是问题所在。

标签: android playlist mediastore playlists


【解决方案1】:

问题已解决。人为错误和不耐烦的结合。 查询针对音频表执行

   SELECT duration FROM audio WHERE duration >= '300000' AND duration <= '600000';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多