首页 > 解决方案 > 我正在尝试访问外部存储目录,以获取歌曲列表并在 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)

标签: android

解决方案


推荐阅读