Java 有没有办法从物理手机(外部和内部存储器)读取mp3文件。我试过了,但我不明白

Java 有没有办法从物理手机(外部和内部存储器)读取mp3文件。我试过了,但我不明白,java,android,Java,Android,我没有从getPlayList中得到任何mp3文件 ArrayList<HashMap<String,String>> songList = getPlayList(Environment.getExternalStorageDirectory().getAbsolutePath()); String [] fileNameList = new String[songList.size()]; String [] artistList =

我没有从getPlayList中得到任何mp3文件

ArrayList<HashMap<String,String>> songList = getPlayList(Environment.getExternalStorageDirectory().getAbsolutePath());
        String [] fileNameList = new String[songList.size()];
        String [] artistList = new String[songList.size()];
    enter code here
        if(songList!=null){
            for(int i = 0 ; i < songList.size() ; i++){

                fileNameList[i] = songList.get(i).get("file_song");
                artistList[i] = songList.get(i).get("file_artist");
                //here you will get list of file name and file path that present in your device
                Log.e("file det ails "," name ="+fileNameList[i] +" path = "+artistList[i]);
            }
        }
        RecyclerView playListRecyclerView = findViewById(R.id.playListRecyclerView);
        playListRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        PlayListAdapter playListAdapter = new PlayListAdapter(fileNameList, artistList);
        playListRecyclerView.setAdapter(playListAdapter);
    }

    ArrayList<HashMap<String,String>> getPlayList(String rootPath) {
        ArrayList<HashMap<String,String>> fileList = new ArrayList<>();
        try {
            File rootFolder = new File(rootPath);
            File[] files = rootFolder.listFiles(); //here you will get NPE if directory doesn't contains  any file,handle it like this.
            for (File file : files) {
                if (file.isDirectory()) {
                    if (getPlayList(file.getAbsolutePath()) != null) {
                        fileList.addAll(getPlayList(file.getAbsolutePath()));
                    } else {
                        break;
                    }
                } else if (file.getName().endsWith(".mp3")) {
                    HashMap<String, String> song = new HashMap<>();
                    song.put("file_song", file.getName());
                    song.put("file_artist", file.getAbsolutePath());
                    fileList.add(song);
                }
            }
            return fileList;
        } catch (Exception e) {
            return null;
        }
    }
ArrayList songList=getPlayList(Environment.getExternalStorageDirectory().getAbsolutePath());
String[]fileNameList=新字符串[songList.size()];
String[]artistList=新字符串[songList.size()];
在这里输入代码
如果(歌曲列表!=null){
对于(int i=0;i
我得到了一个错误

原因:java.lang.NullPointerException:尝试调用虚拟机 空对象引用上的方法“int java.util.ArrayList.size()”


getPlayList()
可以返回null。
null.size()
将抛出你的异常。@blackapps我是android新手,我认为getPlayList()返回null,因为它不会返回任何mp3文件。所以我想知道我的代码从内部存储器中取回mp3文件是否有误。你的代码确实有误,因为你没有检查null,只是继续,就好像你有一个有效的数组列表一样。首先修复它。
//这里您将得到NPE
否。只有在下一个语句中。