作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我在屏幕上按下图像时,它会像预期的那样调用 powerButton.OnClickListener() ,并且经过几秒钟的缓冲后,流播放得很好。然而,人们希望显示一个简短的 toast 弹出窗口来通知用户“ radio 流连接,请稍候...”
这就是问题所在,无论我尝试了什么以及将创建 toast 弹出窗口的行放置在何处,它在进入缓冲之前都不会显示。
任何帮助将不胜感激,我已经添加了大部分代码,并将在必要时提供更多代码。
// run on powerButton click
powerButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
// check if the player is started or stopped
if (isPlaying) // player is streaming
{
// stop the stream and set isPlaying to false
mediaPlayer.stop();
// release the media player
releaseMediaPlayer();
// update notification
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
// set power button to "powered off" image
powerButton.setImageResource(R.drawable.power_off);
}
else // player not streaming
{
// notify the user that the stream is loading
final Toast streamLoading = toast.makeText(getBaseContext(), "Radio Stream Connecting, Please Wait...", Toast.LENGTH_SHORT);
streamLoading.show();
// try catch block to attempt connecting to radioUrl
try
{
// create new instance of media player
mediaPlayer = new MediaPlayer();
// set media player to handle audio streams
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
// connect to radio stream and fill buffer
mediaPlayer.setDataSource(radioUrl);
mediaPlayer.prepare(); // might take long depending on buffering speed
// start the media player and set isPlaying to true
mediaPlayer.start();
isPlaying = true;
// update notification, clear stream message
createNotification();
// set power button to "powered on" image
powerButton.setImageResource(R.drawable.power_on);
}
catch (IllegalArgumentException e) // cannot connect to stream
{
// clear streaming text and notify user of failure
final Toast streamError1 = Toast.makeText(MainMenu.this, "Failed to load: Unable to connect to stream!", Toast.LENGTH_SHORT);
streamError1.show();
// release the media player and display error
releaseMediaPlayer();
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
e.printStackTrace();
}
catch (IllegalStateException e) // stream cannot play audio
{
// clear streaming text and notify user of failure
final Toast streamError2 = Toast.makeText(getBaseContext(), "Failed to load: cannot play stream!", Toast.LENGTH_SHORT);
streamError2.show();
// release the media player and display error
releaseMediaPlayer();
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
e.printStackTrace();
}
catch (IOException e) // general connection issue
{
// clear streaming text and notify user of failure
final Toast streamError3 = Toast.makeText(getBaseContext(), "Failed to Load: Connection issue!", Toast.LENGTH_SHORT);
streamError3.show();
// release the media player and display error
releaseMediaPlayer();
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
e.printStackTrace();
}
}
}
});
最佳答案
这是因为在您从 onClick 返回之前,Toast 不会显示,因为那是 UI 线程。在缓冲开始之前你不会这样做。我认为要获得您想要的效果,您可以检查 AsynchTask 在后台线程中进行缓冲并立即从 onClick 返回。
事实上,按照您的做法,如果缓冲时间太长,您的应用程序将被 Android 标记为无响应。
关于java - toast 线从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364277/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!