这是我的第一个activity
package com.android.music_player;import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class ActivityMain extends ListActivity {
   

// private MediaPlayer mMediaPlayer = null;
private String MUSIC_PATH="/sdcard/";
private int currentListItem=0;
private List<String> mMusicList =new ArrayList<String>();

@Override
protected void onCreate(Bundle icicle) {
// TODO Auto-generated method stub
super.onCreate(icicle);
 setContentView(R.layout.main);
     musicList();              
} protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem =position;
// playMusic(MUSIC_PATH+mMusicList.get(position));
String mMusic=mMusicList.get(position).toString();
// String mMusicL = mMusicList.toString();
Intent intent=new Intent();
intent.putExtra("musicName", mMusic);
// intent.putExtra("musicL", mMusicL);
intent.setClass(ActivityMain.this, ActivityNext.class);
ActivityMain.this.startActivity(intent);
} private void musicList() {
File home = new File(MUSIC_PATH);
if(home.listFiles(new MusicFilter()).length>0){
for(File file :home.listFiles(new MusicFilter())){
mMusicList.add(file.getName());
}
ArrayAdapter<String> musicList = new ArrayAdapter<String>(this,
R.layout.musicitm,mMusicList);
setListAdapter(musicList);
}
}

}


class MusicFilter implements FilenameFilter{ @Override
public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"));
}

}
这里可以把列表显示出来,当我点击列表时就跳到第二个activity,但是来到第二个activity一到播放的程序就出错了
package com.android.music_player;import java.io.IOException;import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;public class ActivityNext extends Activity{
private MediaPlayer mMediaPlayer = null;
// private ImageButton mNextImageButton = null;
private String MUSIC_PATH="/sdcard/";
private String mMusicName;
private int currentListItem=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.musicitme);
      
 Intent intent = getIntent();
  mMusicName = intent.getStringExtra("musicName");
  System.out.println(mMusicName);
  String path = MUSIC_PATH+mMusicName;
  System.out.println(path);
  try {
mMediaPlayer.setDataSource(path);
 mMediaPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    System.out.println(mMusicName);
    这个地方打印的文件名正确吗?是你点击的那个文件吗
      

  2.   

    mediaPlayer.setDataSource(filePath);
     // 准备播放
     mediaPlayer.prepare();
     // 播放
      mediaPlayer.start();
      

  3.   

    private MediaPlayer mMediaPlayer = null;
    这个你是申明的MediaPlayer对象,此时为空。
    然后你调用了mMediaPlayer.setDataSource(path);
    能不出错吗?先实例化吧。还有个建议:
    检查是否申明了ActivityNext 这个activity。