使用 Intent 的 ArrayList 上的 Android Studio 空指针异常

Android Studio Null Pointer Exception on ArrayList using Intent

提问人:devman3211 提问时间:3/28/2022 更新时间:8/16/2022 访问量:477

问:

我正在尝试使用捆绑包附加功能创建意图,但我在数组列表中收到空指针异常错误。

这是错误:

     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 播放器的以下应用程序:

播放列表选择器:

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;
        }
    }
}

主要活动:

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


}


}

我试图从播放列表中获取歌曲列表并将其放入播放器中

java android arraylist android 意图 nullpointerexception

评论

0赞 The Dongster 3/28/2022
最终 ArrayList<File> mySongs = findSong(Environment.getExternalStorageDirectory());,arraylist 似乎是空的!检查 mySongs ArrayList 是否不为 null。if(mySongs != 空)
0赞 David Wasser 3/28/2022
MainActivity开始使用不包含“额外”的内容。是否在启动应用时启动?请编辑您的问题并将您的清单添加到帖子中。IntentMainActivity
0赞 David Wasser 3/28/2022
@TheDongster号NPE 说 is .并不是说 中的“额外”是 null。BundlenullBundle
0赞 The Dongster 3/28/2022
@DavidWasser 不,我认为由于 arraylist 为 null 或 arraylist 的类型不可打包,它会产生 nullpointerexception,因为 intent 无法传递 arraylist。
1赞 David Wasser 3/29/2022
@TheDongster 没有。OP 发布了异常。它清楚地表明,他正试图呼吁参考。如果您查看代码,他正在调用一个类型的变量,该变量是从调用 返回的。很明显,是.如果在尝试将 添加到 时出现问题,则异常将抛出到其他位置。getParcelableArrayList()nullgetParcelableArrayList()BundleIntent.getExtras()BundlenullArrayListIntent

答: 暂无答案