android - 我正在尝试访问外部存储目录,以获取歌曲列表并在 RecyclerView 中显示它们
问题描述
它与空指针异常不同,因为它在小于或等于 6 的 android 版本上运行良好
以前我收到错误说线程正在做很多工作,因此它跳过了很多帧,所以我尝试在不同的线程上运行它但是我收到了这个错误。任何建议都受到高度赞赏。因为我是初学者,它在我的设备 Android 6.0 上运行良好,但在更高版本的设备上运行良好。谁能回答为什么?
enter code here
公共类 Musiclist 扩展 AppCompatActivity {
public static ArrayList<File> mymusics;
RecyclerView recyclerView;
Adpterformymusic adpterformymusic;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.musiclistd);
mymusics=new ArrayList<>();
recyclerView=findViewById(R.id.recycleview);
peeMission();
Runnable runnable=new Runnable() {
@Override
public void run() {
mymusics=findsongs(Environment.getExternalStorageDirectory());
adpterformymusic=new Adpterformymusic(Musiclist.this,mymusics);
recyclerView.setLayoutManager(new LinearLayoutManager(Musiclist.this));
recyclerView.setAdapter(adpterformymusic);
}
public ArrayList<File> findsongs(File file)
{
ArrayList<File> mosiac=new ArrayList<>();
File [] files=file.listFiles();
assert files != null;
Log.d("checking length of file",String.valueOf(files.length));
for(File single:files)
{
if(single.isDirectory() && !single.isHidden())
{
mosiac.addAll(findsongs(single));
}
else
{
if(single.getName().endsWith(".mp3"))
{
mosiac.add(single);
}
}
}
return mosiac;
}
};
Thread thread=new Thread(runnable);
thread.start();
}
@RequiresApi(api = Build.VERSION_CODES.M)
public void peeMission()
{
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED)
{
}
else
{
ActivityCompat.requestPermissions(Musiclist.this
,new String[] {Manifest.permission.READ_EXTERNAL_STORAGE},2);
}
}
}
这是获取歌曲列表的java代码,在我的logcat中显示
日志猫
Logcat 2020-12-13 22:47:33.094 12296-12377/com.example.read_it1 E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.read_it1, PID: 12296
java.lang.NullPointerException: Attempt to get length of null array
at com.example.read_it1.Musiclist$1.findsongs(Musiclist.java:60)
at com.example.read_it1.Musiclist$1.run(Musiclist.java:47)
at java.lang.Thread.run(Thread.java:919)
解决方案
推荐阅读
- amazon-web-services - AWS 基于实例状态和实例持续时间的通知
- javascript - 在 Javascript 中访问 Shopify Liquid 变量
- java - 为什么枚举引用变量不能单独声明在方法之外?
- python - 为什么服务器(python)和客户端(统一的 C#)之间的 2 台计算机连接不起作用?
- graphql - 自定义 Gatsby / Contentful Schema
- macos - phpmyadmin 无法在 mac 安装的依赖项中工作,但仍然不好
- shell - " 语法错误: "(" unexpected " with table
- javascript - 如何自动上传文件以测试代码?
- postgresql - Postgres Windows 函数查询太慢
- c# - 如何获取非静态字段的对象引用