[英]how to fetch .mp3 files from internal storage in android
我想从内部存储中获取 .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;
}
但是我遇到了 null 指针错误
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);
}
}
您应该使用内容提供商从内部存储中获取歌曲。
我已使用MediaStore
成功获取音频文件
代码
String[] proj = {
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA....
然后将它们设置为ArrayAdapter<>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.