Android Studio null指针在ArrayList上使用意图

发布于 2025-01-17 07:09:14 字数 6363 浏览 2 评论 0原文

我正在尝试使用捆绑包创建一个意图,但我在数组列表上收到空指针异常错误。

这是错误:

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList android.os.Bundle.getParcelableArrayList(java.lang.String)' on a null object reference

我的意图是否错误?

下面是我的 MP3 播放器应用程序:

PlaylistSelector:

public class PlaylistSelector extends AppCompatActivity {
    ListView listview;
    String[] items;



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

        listview = findViewById(R.id.listViewSong);

        runtimePermission();
    }

    public void runtimePermission()
    {
        Dexter.withContext(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                .withListener(new PermissionListener() {
                                  @Override
                                  public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                                      displaySongs();


                                  }

                                  @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();

        for (File singlefile: files)
        {
            if (singlefile.isDirectory() && !singlefile.isHidden())
            {
                arrayList.addAll(findSong(singlefile));
            }
            else
            {
                if (singlefile.getName().endsWith(".mp3") || singlefile.getName().endsWith(".wav"))
                {
                    arrayList.add(singlefile);
                }
            }
        }
        return arrayList;
    }

    void displaySongs()
    {
        final ArrayList<File> mySongs = findSong(Environment.getExternalStorageDirectory());
        items = new String[mySongs.size()];
        for(int i = 0; i<mySongs.size(); i++)
        {
            items[i] = mySongs.get(i).getName().toString().replace(".mp3","").replace(".wav","");

        }
        /*ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,songs);
        listview.setAdapter(myAdapter);*/

        customAdapter customAdapter = new customAdapter();
        listview.setAdapter(customAdapter);


        listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String songName = (String) listview.getItemAtPosition(i);
                startActivity(new Intent(getApplicationContext(), MainActivity.class)
                        .putExtra("songs", mySongs)
                        .putExtra("songname", songName)
                        .putExtra("pos", i));
            }
            });
    }


    class customAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return items.length;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View myView = getLayoutInflater().inflate(R.layout.list_item, null);
            TextView textsong = myView.findViewById(R.id.txtsongname);
            textsong.setSelected(true);
            textsong.setText(items[i]);

            return myView;
        }
    }
}

MainActivity:

public class MainActivity extends AppCompatActivity  {
  private static final String TAG = "MainActivity";

  private InputSource inputSource;




  

  Button playbtn, btnnext,btnprev,btnff,btnrw;
  TextView txtsn, txtsstop,txtsstart;
  SeekBar seekmusic;
  BarVisualizer visualizer;

  String sname;

  public static final String EXTRA_NAME = "song_name";
  static MediaPlayer mediaPlayer;
  int position;
  ArrayList<File> mySongs;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View frameLayoutMP = findViewById(R.id.preview_mp3_layout);
    btnprev = findViewById(R.id.btnprev);
    playbtn = findViewById(R.id.playbtn);
    btnnext = findViewById(R.id.btnnext);
    btnrw = findViewById(R.id.btnrw);
    btnff = findViewById(R.id.btnff);
    txtsn = findViewById(R.id.txtsn);
    txtsstop = findViewById(R.id.txtsstop);
    txtsstart = findViewById(R.id.txtsstart);
    seekmusic = findViewById(R.id.seekbar);
    visualizer = findViewById(R.id.blast);

    if (mediaPlayer != null)
    {
      mediaPlayer.stop();
      mediaPlayer.release();
    }

    Intent i = getIntent();
    Bundle bundle = i.getExtras();

    mySongs = (ArrayList) bundle.getParcelableArrayList("songs");
    String songName = i.getStringExtra("songname");
    position = bundle.getInt("pos",0);
    txtsn.setSelected(true);
    Uri uri = Uri.parse(mySongs.get(position).toString());
    sname = mySongs.get(position).getName();
    txtsn.setText(sname);

    mediaPlayer = MediaPlayer.create(getApplicationContext(),uri);
    mediaPlayer.start();

    playbtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        if(mediaPlayer.isPlaying())
        {
          playbtn.setBackgroundResource(R.drawable.ic_play);
          mediaPlayer.pause();
        }
        else
        {
          playbtn.setBackgroundResource(R.drawable.ic_pause);
          mediaPlayer.start();
        }
      }
    });


}


}

我试图获得此意图,从播放列表中抓取歌曲列表并将其放入播放器中

I am trying to create an intent with bundle extras but I am getting null pointer exception error on the Array List.

Here is the error:

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList android.os.Bundle.getParcelableArrayList(java.lang.String)' on a null object reference

Am I implementing intents wrong?

Here is my application below for MP3 Player:

PlaylistSelector:

public class PlaylistSelector extends AppCompatActivity {
    ListView listview;
    String[] items;



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

        listview = findViewById(R.id.listViewSong);

        runtimePermission();
    }

    public void runtimePermission()
    {
        Dexter.withContext(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                .withListener(new PermissionListener() {
                                  @Override
                                  public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                                      displaySongs();


                                  }

                                  @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();

        for (File singlefile: files)
        {
            if (singlefile.isDirectory() && !singlefile.isHidden())
            {
                arrayList.addAll(findSong(singlefile));
            }
            else
            {
                if (singlefile.getName().endsWith(".mp3") || singlefile.getName().endsWith(".wav"))
                {
                    arrayList.add(singlefile);
                }
            }
        }
        return arrayList;
    }

    void displaySongs()
    {
        final ArrayList<File> mySongs = findSong(Environment.getExternalStorageDirectory());
        items = new String[mySongs.size()];
        for(int i = 0; i<mySongs.size(); i++)
        {
            items[i] = mySongs.get(i).getName().toString().replace(".mp3","").replace(".wav","");

        }
        /*ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,songs);
        listview.setAdapter(myAdapter);*/

        customAdapter customAdapter = new customAdapter();
        listview.setAdapter(customAdapter);


        listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String songName = (String) listview.getItemAtPosition(i);
                startActivity(new Intent(getApplicationContext(), MainActivity.class)
                        .putExtra("songs", mySongs)
                        .putExtra("songname", songName)
                        .putExtra("pos", i));
            }
            });
    }


    class customAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return items.length;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View myView = getLayoutInflater().inflate(R.layout.list_item, null);
            TextView textsong = myView.findViewById(R.id.txtsongname);
            textsong.setSelected(true);
            textsong.setText(items[i]);

            return myView;
        }
    }
}

MainActivity:

public class MainActivity extends AppCompatActivity  {
  private static final String TAG = "MainActivity";

  private InputSource inputSource;




  

  Button playbtn, btnnext,btnprev,btnff,btnrw;
  TextView txtsn, txtsstop,txtsstart;
  SeekBar seekmusic;
  BarVisualizer visualizer;

  String sname;

  public static final String EXTRA_NAME = "song_name";
  static MediaPlayer mediaPlayer;
  int position;
  ArrayList<File> mySongs;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View frameLayoutMP = findViewById(R.id.preview_mp3_layout);
    btnprev = findViewById(R.id.btnprev);
    playbtn = findViewById(R.id.playbtn);
    btnnext = findViewById(R.id.btnnext);
    btnrw = findViewById(R.id.btnrw);
    btnff = findViewById(R.id.btnff);
    txtsn = findViewById(R.id.txtsn);
    txtsstop = findViewById(R.id.txtsstop);
    txtsstart = findViewById(R.id.txtsstart);
    seekmusic = findViewById(R.id.seekbar);
    visualizer = findViewById(R.id.blast);

    if (mediaPlayer != null)
    {
      mediaPlayer.stop();
      mediaPlayer.release();
    }

    Intent i = getIntent();
    Bundle bundle = i.getExtras();

    mySongs = (ArrayList) bundle.getParcelableArrayList("songs");
    String songName = i.getStringExtra("songname");
    position = bundle.getInt("pos",0);
    txtsn.setSelected(true);
    Uri uri = Uri.parse(mySongs.get(position).toString());
    sname = mySongs.get(position).getName();
    txtsn.setText(sname);

    mediaPlayer = MediaPlayer.create(getApplicationContext(),uri);
    mediaPlayer.start();

    playbtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        if(mediaPlayer.isPlaying())
        {
          playbtn.setBackgroundResource(R.drawable.ic_play);
          mediaPlayer.pause();
        }
        else
        {
          playbtn.setBackgroundResource(R.drawable.ic_pause);
          mediaPlayer.start();
        }
      }
    });


}


}

I am trying to get this intent to grab song lists from playlists and put it into the player

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文