我需要从我的音乐服务中设置ProgressDialog.dismiss
。我试图建立的AsyncTask与从服务中获取对ProgressDialog的引用
final class TheTask extends AsyncTask<Void, Void, Void>{
ProgressDialog dialog = ProgressDialog.show(SomafmActivity.this, "",
"Loading. Please wait...", true);
@Override
protected void onPreExecute() {
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
final Intent i = new Intent(MusicService.ACTION_URL);
Uri uri = Uri.parse("http://sfstream1.somafm.com:8880");
i.setData(uri);
startService(i);
return null;
}
@Override
protected void onPostExecute(Void result) {
dialog.dismiss();
}
和工作正常,但它在关闭对话框的启动startService(我)调用的使对话框立即消失。于是我试着从MusicService服务访问我的ProgressDialog:
的ProgressDialog声明在我的主要活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.somafm);
ProgressDialog dialog = ProgressDialog.show(SomafmActivity.this, "",
"Loading. Please wait...", true);
}
,并在我的MusicService:
public void onPrepared(MediaPlayer player) {
// The media player is done preparing. That means we can start playing!
mState = State.Playing;
updateNotification(mSongTitle + " (playing)");
configAndStartMediaPlayer();
ProgressDialog dialog = (ProgressDialog) SomafmActivity.dialog; //This line I believe is wrong
dialog.dismiss();
}
,但我在LogCat中发生NullPointerException。我敢肯定,从这个位置开始的对话将解决问题,因为直到流加载并开始播放之前,我都不会收到错误。
我的问题是,我应该如何正确引用我的音乐服务中的ProgressDialog?
谢谢!这很好。 –
标记答案已被接受 –