【问题标题】:how to fetch .mp3 files from internal storage in android如何从android的内部存储中获取.mp3文件
【发布时间】:2020-09-28 22:43:24
【问题描述】:

我想从内部存储中获取 .mp3 文件,这里是 for 循环

public ArrayList<File> findsong(File file){
        ArrayList<File> arrayList = new ArrayList<>();
        File[] files = file.listFiles();
        for (File singleFiles: files){
            if (singleFiles.isDirectory() && !singleFiles.isHidden()){
                arrayList.addAll(findsong(singleFiles));
            }else {
                if (singleFiles.getName().endsWith(".mp3")){
                    arrayList.add(singleFiles);
                }
            }
        }
        return arrayList;
    } 

但是我遇到了空指针错误

java.lang.NullPointerException: Attempt to get length of null array

这是我的完整代码

正在尝试做的事情的上下文:我想显示来自内部/外部存储的音频文件列表,由于是 android 开发的新手,我被困在这里,帮助会很大

提前致谢

ListView myListViewForSongs;
    String[] items;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        runtimePermission();
        myListViewForSongs= (ListView) findViewById(R.id.listView);
    }
    public void runtimePermission(){
        Dexter.withContext(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE).withListener(new PermissionListener() {
            @Override
            public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                display();
            }

            @Override
            public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {

            }

            @Override
            public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
                permissionToken.continuePermissionRequest();
            }
        }).check();
    }
    public ArrayList<File> findsong(File file){
        ArrayList<File> arrayList = new ArrayList<>();
        File[] files = file.listFiles();
        assert files != null;
        for (File singleFiles: files){
            if (singleFiles.isDirectory() && !singleFiles.isHidden()){
                arrayList.addAll(findsong(singleFiles));
            }else {
                if (singleFiles.getName().endsWith(".mp3")){
                    arrayList.add(singleFiles);
                }
            }
        }
        return arrayList;
    }
    void display(){
        final ArrayList<File> mySongs=findsong(new File(Environment.getExternalStorageState()));
        items = new String[mySongs.size()];
        for (int i=0;i<mySongs.size();i++){
            items[i]= mySongs.get(i).getName().replace(".mp3","");
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
        myListViewForSongs.setAdapter(adapter);
    }
}

【问题讨论】:

标签: java android android-studio nullpointerexception


【解决方案1】:

您应该使用内容提供程序从内部存储中获取歌曲。

【讨论】:

  • 你能详细说明一下吗..因为我是android开发的新手,我无法理解,如果可能的话,一个例子会很好提前谢谢
  • developer.android.com/training/data-storage/shared/…。请检查此链接,甚至我正在浏览它。
  • 你找到了吗?
  • 我现在正在浏览文档
【解决方案2】:

我已经使用MediaStore成功获取了音频文件

代码

    String[] proj = {
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.DATA....

然后将它们设置为ArrayAdapter&lt;&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多