如何在android内容提供程序查询媒体商店中设置“where”语句

时间:2012-05-26 20:51:30

标签: android android-contentprovider mediastore

我可以查询Android MediaStore,但我无法设置“where”语句。所以我放弃了试图获得它,并试图破解它,我的黑客也无法正常工作。

我的黑客是浏览光标的每一行,看看我感兴趣的列的字符串值是否等同于我的搜索关键字...我的代码如下。我想要做的是找到专辑中的所有歌曲(或艺术家,播放列表)。

感谢任何帮助设置查询“where”或为什么我的字符串比较不起作用...

private void loadList() {

        String selection = ((HashMap<String, String>) selectedAlbumData.get(0))
                .get("Album").toString();

        String[] proj = { MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ARTIST,
                MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DURATION };

        // managed query doesn't need startManagingCursor called on the
        Cursor c = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                proj, null, null, null);

        if (c.getCount() < 1) {
            Log.d("AFA", "Cursor query is empty.. :( ...");
        } else {

            // do stuff with our content...
            while (c.moveToNext()) {

                HashMap<String, String> temp = new HashMap<String, String>();

                if (c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM)) == selection) {

                            //do stuff with this data

                }
                Log.d("SongChoosing", "C str is: " + c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM)));
            }

            //debug stuff
            c.moveToPosition(5);
            Log.d("SongChoosing", "Selection is: " + selection);
            Log.d("SongChoosing", "C str is: " + c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM)));
        }
    }

我在专辑列中寻找的字符串值是一个有效的字符串,它不是空的或空的。我尝试在日志猫上打印我的每一行歌曲,字符串看起来相当于肉眼但我的如果陈述不起作用......

非常感谢能帮助我的人。

1 个答案:

答案 0 :(得分:1)

你必须使用equals或equalsIgnoreCase而不是== with strings。

试试这个

 if (c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM)).equalsIgnoreCase(selection)) {

                        //do stuff with this data

            }