如何从" onCreate()"同一类的另一种方法中的Arraylist变量?

时间:2015-06-03 08:46:35

标签: java android arraylist

我想访问全局声明的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");    
}

可能是什么问题?

3 个答案:

答案 0 :(得分:0)

替换此

mySongs = (ArrayList) b.getParcelableArrayList("songlist"); 

用这个

mySongs = new ArrayList<Object>(b.getParcelableArrayList("songlist"));

答案 1 :(得分:0)

将其设为public static,您就可以将ArrayList传递给另一个班级了。但是,更好的方法是使用SerializableParcelable传递它。

使用它

mySongs = new ArrayList<Object>(b.getParcelableArrayList("songlist"));

答案 2 :(得分:0)

您全局声明了mySongs,但是您是否在onCreate()中创建了它的实例?

mySongs = new ArrayList(); ?