【发布时间】: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);
}
}
【问题讨论】:
-
请粘贴整个代码和错误的整个输出。
-
还从展示你如何定义
file开始。 -
所以
files为空。使用前检查是否为空。如果值为 null,则返回。不要继续。显示 toast 以通知用户。 -
您从该错误消息中了解到什么?请参阅:java.lang.NullPointerException: Attempt to get length of null array。
标签: java android android-studio nullpointerexception