Musikplayer NullPointerException external storage problem. Bitte um Hilfe

  • private ArrayList<File> findAllSong(File file) {


    File[] files = file.listFiles();


    ArrayList<File> songList = new ArrayList<>();


    for (File eachSongFile : files) {
    if (eachSongFile.isDirectory() && !eachSongFile.isHidden()) {
    songList.addAll(findAllSong(eachSongFile));
    } else {
    if (eachSongFile.getName().endsWith(".mp3") || eachSongFile.getName().endsWith(".wav")
    ) {
    songList.add(eachSongFile);
    }
    }



    }
    //songList.remove(0);



    return songList;



    }
    Hallo habe das Problem das Ich hier bei files ein NullPointerException fehler habe. Belasse Ich dies so, stürzt das Programm ab. ändere ich dies zuif (files != null) { for (File eachSongFile : files) {öffnet das Programm aber findet keine Lieder.hm... Bitte um Hilfe
    hier denn gesamten Mainactivity.java

    package com.example.audiomusicplayer;


    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.app.ActivityCompat;


    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.FileObserver;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;


    import java.io.File;
    import java.util.ArrayList;


    public class MainActivity extends AppCompatActivity {


    String songItem[];
    ListView listView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    listView=findViewById(R.id.listViewId);


    CheckUserPermsions();



    }



    void CheckUserPermsions() {
    if (Build.VERSION.SDK_INT >= 23) {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
    PackageManager.PERMISSION_GRANTED) {
    requestPermissions(new String[]{
    Manifest.permission.READ_EXTERNAL_STORAGE},
    REQUEST_CODE_ASK_PERMISSIONS);
    return;
    }
    }


    display(); // init the Gallary Display


    }


    //get acces to location permsion
    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;



    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
    case REQUEST_CODE_ASK_PERMISSIONS:
    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    display(); // // init the Gallary Display
    } else {
    // Permission Denied
    Toast.makeText(this, "permission Denial", Toast.LENGTH_SHORT)
    .show();
    }
    break;
    default:
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
    }



    private ArrayList<File> findAllSong(File file) {


    File[] files = file.listFiles();

    ArrayList<File> songList = new ArrayList<>();


    for (File eachSongFile : files) {
    if (eachSongFile.isDirectory() && !eachSongFile.isHidden()) {
    songList.addAll(findAllSong(eachSongFile));
    } else {
    if (eachSongFile.getName().endsWith(".mp3") || eachSongFile.getName().endsWith(".wav")
    ) {
    songList.add(eachSongFile);
    }
    }



    }
    //songList.remove(0);



    return songList;



    }



    void display() {


    final ArrayList<File> myAllSong = findAllSong(Environment.getExternalStorageDirectory());
    songItem = new String[myAllSong.size()];


    for (int j = 0; j < myAllSong.size(); j++) {
    songItem[j] = myAllSong.get(j).getName().toString()
    .replace(".mp3","").replace(".wav","")
    ;


    // toast(myAllSong.get(j).getName().toString());


    }



    ArrayAdapter<String> arrayAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,songItem);
    listView.setAdapter(arrayAdapter);




    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {



    String songName=listView.getItemAtPosition(position).toString();




    Intent intent=new Intent(MainActivity.this,MyPlayerActivity.class);
    intent.putExtra("mySongName",songName);
    intent.putExtra("songPos",position);
    intent.putExtra("allSong",myAllSong);
    startActivity(intent);




    }
    });
    Toast.makeText(this, "Wähle einen Song!", Toast.LENGTH_LONG).show();




    }




    // public void toast(String text){
    // Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
    // }



    }

  • Hallo ich gehe mal davon aus das, du unter und für api 30 schreibst.
    Ab API 29 ist es nicht mehr so einfach möglich auf die sd karte gleich ob interner oder echte externe karte zuzugreifen.
    Ab 29 ist scroped memory und Zugriff auf sd nur noch mit storage access framework. Der Zugriff denn du versuchst geht noch bis api 28 für die interne Karte externe schon lange nicht mehr.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!