java - 无法从 Android 设备获取所有歌曲

标签 java android

我正在尝试学习如何开发 Android 应用程序,并且我在网络上发现了一个非常有用的教程,该教程试图创建一个简单的音乐播放器。

尽管我遵循了它,但我遇到了一个问题: 当我尝试运行该应用程序时,编译器中没有出现任何错误,但在模拟器上该应用程序不会启动,并显示以下错误消息:

Unfortunately, MusicPlayer has stopped.

这是代码:

public class MainActivity extends AppCompatActivity {
private ArrayList<Song> songList;
private ListView songView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    songView = (ListView) findViewById(R.id.song_list);
    songList = new ArrayList<Song>();
    getSongList();
}

public void getSongList(){
    // retrieve song info
    ContentResolver musicResolver = getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns

        int titleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ARTIST);
        //add songs to list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);
            songList.add(new Song(thisId, thisTitle, thisArtist));
        }
        while (musicCursor.moveToNext());
    }
}

}

稍微检查了一下代码后,我发现当我调用以下命令时应用程序崩溃了:

Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

知道问题出在哪里吗?

最佳答案

查看此处的文档:https://developer.android.com/guide/topics/providers/content-provider-basics.html

您需要传递比实际更多的参数。第二个参数应该是列名的字符串数组,如果没有它,您将无法选择任何数据。

文档 fragment :

// Queries the user dictionary and returns results
mCursor = getContentResolver().query(
    UserDictionary.Words.CONTENT_URI,   // The content URI of the words table
    mProjection,                        // The columns to return for each row
    mSelectionClause                    // Selection criteria
    mSelectionArgs,                     // Selection criteria
    mSortOrder);                        // The sort order for the returned rows

关于java - 无法从 Android 设备获取所有歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930019/

相关文章:

java - 忽略在 yaml 配置中为 spring boot admin 应用程序指定的斜杠字符

java - Gradle构建:从Spring Boot Jar文件中排除资源文件

android - Listview 上的通用图像加载器很慢

java - 在可绘制对象中使用 ?attr/color 时出现滑动错误

java - 哈希集中的重复元素(正确实现比较器/比较方法后)

java - 在jsp中使用JSTL标签

java - Maven 在 Eclipse 中构建而不使用命令提示符

java - 我怎样才能让我的应用程序在运行时在每次启动时都开始干净?

android - 在 Android flavors 中,Activity 不会根据 flavor 而改变。仅调用主包 Activity

java - ListPreference 将值存储为字符串而不是整数