Android菜鳥求救,請求盡量以簡單方式說明

[复制链接]
查看11 | 回复7 | 2021-1-27 05:31:18 | 显示全部楼层 |阅读模式
我是想弄一個播放音樂的app
可以有播放暫停等功能
另外還可以觸發seekbar達成控制音樂播放等效果
可是一運行app就出錯
錯誤警示,
Causedby:java.lang.NullPointerException:Attempttoinvokevirtualmethod'voidandroid.widget.SeekBar.setOnSeekBarChangeListener(android.widget.SeekBar$OnSeekBarChangeListener)'onanullobjectreference
atcom.example.user.lab2_leemingchak.MainActivity.onCreate(MainActivity.java:43)


packagecom.example.user.lab2_leemingchak;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.net.Uri;
importandroid.os.Handler;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.ImageButton;
importandroid.widget.ProgressBar;
importandroid.widget.SeekBar;
publicclassMainActivityextendsAppCompatActivityimplementsMediaPlayer.OnPreparedListener,
MediaPlayer.OnCompletionListener{
privateMediaPlayermediaplayer;
privateSeekBarseekbar;
privateRunnablerunnable;
privateHandlerhandble;
privateinti;
ImageButtonplaybtn,stopbtn;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initializebuttonUIs
playbtn=(ImageButton)findViewById(R.id.playBtn);
stopbtn=(ImageButton)findViewById(R.id.stopBtn);
//convertStringurltoUriformatusing.parse()
Uripath=Uri.parse("android.resource://"+//setthemusicfileinres/rawasdefault
getPackageName()+"/"+R.raw.enm);
//disablethePlayandStopbuttonsusing.setEnabled()
playbtn.setEnabled(false);
stopbtn.setEnabled(false);
//newaMediaPlayerobject
mediaplayer=newMediaPlayer();
//setOnPreparedListener()andOnCompletionListener()totheMediaPlayerobject
mediaplayer.setOnPreparedListener(this);
mediaplayer.setOnCompletionListener(this);
seekbar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener(){
@Override
publicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){
i=progress;
if(fromUser){
mediaplayer.seekTo(progress);
}
}
@Override
publicvoidonStartTrackingTouch(SeekBarseekBar){
}
@Override
publicvoidonStopTrackingTouch(SeekBarseekBar){
}
});
//prepareanddownloadtheaudiofile,onPrepared()methodwillberunwhenreadytoplay
try{
mediaplayer.reset();
mediaplayer.setDataSource(this,path);
mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//instreamingmode
mediaplayer.prepareAsync();
}catch(Exceptione){
e.printStackTrace();
}
seekbar=(SeekBar)findViewById(R.id.seekBar);
}
//whenPlay/Pausebuttonisclicked
//checkwhethertheMediaPlayerisplayingornot,startplayingifnot,otherwise,pausetheplayback
publicvoidonPlayUrlClick(Viewview){
if(mediaplayer.isPlaying()){
mediaplayer.pause();
playbtn.setEnabled(true);
stopbtn.setEnabled(true);
playbtn.setImageResource(R.drawable.play);
}else{
mediaplayer.start();
playbtn.setEnabled(true);
stopbtn.setEnabled(true);
playbtn.setImageResource(R.drawable.puase);
changeSeekbar();
}
}
//whenStopbuttonisclicked
publicvoidonStopClick(Viewview){
mediaplayer.seekTo(0);
playbtn.setEnabled(true);
stopbtn.setEnabled(true);
}
@Override
//whentheaudiofileisreadytoplay
//enablethePlaybuttonanddisabletheStopbutton
publicvoidonPrepared(MediaPlayermediaplayer){
seekbar.setMax(mediaplayer.getDuration());
changeSeekbar();
playbtn.setEnabled(true);
stopbtn.setEnabled(false);
}
privatevoidchangeSeekbar(){
seekbar.setProgress(mediaplayer.getCurrentPosition());
if(mediaplayer.isPlaying()){
runnable=newRunnable(){
@Override
publicvoidrun(){
changeSeekbar();
}
};
handble.postDelayed(runnable,1000);
}
};
@Override
//whentheaudiofileplaystotheend
publicvoidonCompletion(MediaPlayermediaplayer){
mediaplayer.seekTo(0);
}
publicvoidonbackClick(Viewview){
i=i-5;
mediaplayer.seekTo(i);
}
publicvoidonskipClick(Viewview){
i=i+5;
mediaplayer.seekTo(i);
}
}

UI界面

[I]
[I]
[I]
[I]
[I]


分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
seekbar=(SeekBar)findViewById(R.id.seekBar);
seekbar.setOnSeekBarChangeListener(...);
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
seekbar=(SeekBar)findViewById(R.id.seekBar);
在下面一點的地方,但是也在oncreate裡面,應該沒問題吧
救命啊==明天就要交了
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
引用2楼?meo?的回复:seekbar=(SeekBar)findViewById(R.id.seekBar);
在下面一點的地方,但是也在oncreate裡面,應該沒問題吧
救命啊==明天就要交了

不可以的,代码运行是有顺序的,你都不先声明这个控件就设置点击事件是找不到控件的
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
引用3楼six周的回复:Quote: 引用2楼?meo?的回复:
seekbar=(SeekBar)findViewById(R.id.seekBar);
在下面一點的地方,但是也在oncreate裡面,應該沒問題吧
救命啊==明天就要交了

不可以的,代码运行是有顺序的,你都不先声明这个控件就设置点击事件是找不到控件的

我去試試,多謝你
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
現在程式是可以運行了
按鈕也能發揮作用
但是seekbar沒有跟著一起動
一動不動的站在原地
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
自己google或者百度下mediaPlayer+seekBar播放的例子参考吧,我也没做过
回复

使用道具 举报

千问 | 2021-1-27 05:31:18 | 显示全部楼层
第43行,有空对象了,seekbar没初始化吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行