我想访问全局声明的Arraylist
变量( mySongs ),并在另一个名为onCreate()
的方法btnNext()
方法中使用。此变量的值取自使用Intent
的另一个类。
但我无法在btnNext()
方法中获取该变量的值。
Intent i = getIntent();
Bundle b = i.getExtras();
mySongs = (ArrayList) b.getParcelableArrayList("songlist");
position = b.getInt("pos",0);
它在此变量上给出了空指针异常。在日志中检查后,它显示“无效”字样。在方法中,当在btnNext()
方法之外的Log上检查时,它工作正常。
public void btnNext(){
Log.d("DATA", "songs"+mySongs);
if(isRepeat==true || isShuffle==true)
{
isRepeat = false;
btnRepeat.setImageResource(R.drawable.btn_repeat_default);
isShuffle = false;
btnShuffle.setImageResource(R.drawable.btn_shuffle_default);
}
mp.stop();
mp.release();
position = (position+1) % mySongs.size();
Log.d("DATA", "p"+position);
u = Uri.parse(mySongs.get(position).toString());
mp = MediaPlayer.create(getApplicationContext(),u);
displaySongName(position);
mp.start();
btnPlay.setImageResource(R.drawable.btn_pause);
//Toast.makeText(this, "Method called", Toast.LENGTH_SHORT).show();
Log.d("DATA", "p");
}
可能是什么问题?
答案 0 :(得分:0)
替换此
mySongs = (ArrayList) b.getParcelableArrayList("songlist");
用这个
mySongs = new ArrayList<Object>(b.getParcelableArrayList("songlist"));
答案 1 :(得分:0)
将其设为public
static
,您就可以将ArrayList
传递给另一个班级了。但是,更好的方法是使用Serializable
或Parcelable
传递它。
使用它
mySongs = new ArrayList<Object>(b.getParcelableArrayList("songlist"));
答案 2 :(得分:0)
您全局声明了mySongs,但是您是否在onCreate()中创建了它的实例?
mySongs = new ArrayList(); ?