我在的Android開發初學者,我正在開發一個音樂應用程序我質疑所有SD卡音樂列表中,但我無法通過播放所選歌曲其名稱或ID。我列出了它在listView,並通過點擊所選項目顯示它的名稱,我選擇了哪首歌曲,但沒有使用mediaplayer類播放它。請幫我解決它。無法播放音樂的Android
這是從SD卡獲取歌曲的列表第一個Java文件:
公共類MusicAppList延伸活動{
TextView tv;
ContentResolver cr;
Cursor cs;
Uri uri;
ListView lv;
String tname,csong;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_app_list);
lv=(ListView)findViewById(R.id.songslist);
Songs();
}
public void Songs(){
cr=getContentResolver();
uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
cs=cr.query(uri,null,null, null,"title ASC");
final ArrayList<String> list=new ArrayList<String>();
while(cs.moveToNext()){
list.add(cs.getString(cs.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE)));
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(getApplicationContext(),R.layout.mlistinterface,list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
csong=(String)parent.getItemAtPosition(position);
Intent i1=new Intent(getApplicationContext(),MusicPlaying.class);
Bundle b=new Bundle();
b.putInt("pos", position);
b.putString("song", csong);
b.putStringArrayList("songlist", list);
i1.putExtras(b);
startActivity(i1);
}
}); }}
2.下面是第二的Java文件我正在嘗試播放歌曲。
公共類MusicPlaying延伸活動{
TextView tv;
ImageView pre,nxt,play;
ArrayList<String>songList;
String name;
private MediaPlayer mp;
String song;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_playing);
tv=(TextView)findViewById(R.id.songname);
pre=(ImageView)findViewById(R.id.previous);
nxt=(ImageView)findViewById(R.id.next);
play=(ImageView)findViewById(R.id.play);
tv.setSelected(true);
Bundle bb=getIntent().getExtras();
name=bb.getString("song");
tv.setText(String.valueOf(name));
songList=(ArrayList)bb.getStringArrayList("songlist") ;
int pos=bb.getInt("pos");
mp=new MediaPlayer();
Uri u=Uri.parse(songList.get(pos));
try{
mp.setDataSource(getApplicationContext(), u);
mp.prepareAsync();
mp.start();
}
catch(Exception e){
Log.e("ErrorPlaying", "Unable to get Reference of the song");
}
}}
3. logcat的錯誤是: -
11-15 15:57:13.503:E/AndroidRuntime(996):致命異常:主要 11-15 15:57:13.503:E/AndroidRuntime(996):進程:com.example.musicapp,PID:996
11-15 15:57:13.503:E/AndroidRuntime(996):java .lang.RuntimeException:無法啓動活動ComponentInfo {com.example.musicapp/com.example.musicapp.MusicPlaying}:java.lang.NullPointerException:試圖在空對象引用 11-15 15: 57:13.503:E/AndroidRuntime(996):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2455) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.app.ActivityThread。 handleLaunchActivity(ActivityThread.java:2517) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.app.ActivityThread.access $ 800(ActivityThread.java:162) 11-15 15:57:13.503 :E/AndroidRuntime(996):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1412) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.os.Handler.dispatchMessage (Handler.java:106) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.os.Looper.loop(Looper.java:189) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.app.ActivityThread.main(ActivityThread.java:5529) 11-15 15:57:13.503:E/AndroidRuntime(996):at java.lang.reflect.Method.invoke(Native Method) 11-15 15:57:13.503:E/AndroidRuntime(996):at java.lang.reflect .Method.invoke(Method.java:372) 11-15 15:57:13.503:E/AndroidRuntime(996):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:950) 11-15 15:57:13.503:E/AndroidRuntime(996):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 11-15 15:57:13.503:E/AndroidRuntime(996 ):引起:java.lang.NullPointerException:嘗試調用空對象引用虛擬方法'void android.media.MediaPlayer.prepareAsync()' 11-15 15:57:13.50 3:E/AndroidRuntime(996):在com.example.musicapp.MusicPlaying.onCreate(MusicPlaying.java:60) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.app.Activity。 performCreate(Activity.java:5966) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.app。Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 11-15 15:57:13.503:E/AndroidRuntime(996):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2408)
把一些代碼放在treid –
您可以將問題中的代碼格式化爲文本,以便人們可以複製/粘貼來測試並幫助您。請考慮編輯您的問題並將代碼插入爲文本(並格式化)。 – Tom
除非: 1)你會從MusicPlaying onCreate發佈一些代碼:你確定Intent數據被正確檢索嗎? 2)你也應該發佈一些logcat:你有什麼異常? 3)更好地複製和粘貼你的代碼,而不是截圖,因爲湯姆已經指出 – c0rtexx