java - 如何从android的内部存储中获取.mp3文件
问题描述
我想从内部存储中获取 .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);
}
}
解决方案
您应该使用内容提供商从内部存储中获取歌曲。
推荐阅读
- c++ - C ++重载比较运算符与强制转换运算符
- php - 为什么我不能在这段代码 [PHP-CURL] 中使用相同的 cookie 访问两个不同的网页?
- javascript - 检查数组中的所有值是否为真,然后返回一个真布尔语句(javascript)
- python - Leetcode Longest Common Prefix 运行时错误
- regex - 删除行的正则表达式
- android - Android - gRPC 客户端 - 从 Java 到 Kotlin
- javascript - CS50 PSet8 混搭 - 标记不显示在 Google 地图上
- php - 将值从一个数据库更新到另一个数据库 - 最快的方法
- php - 根据 Woocommerce 中的自定义价格更改产品价格
- ruby-on-rails - 创建自定义表单助手时是否需要 html_safe?