【发布时间】:2014-02-08 20:26:26
【问题描述】:
我知道有人问过这个问题的一千个不同版本,我已经查看了它们并尝试了这些建议,但没有一个奏效。我试图在单击按钮时播放声音,同时在屏幕上显示新文本。当我按下按钮时,我会切换文本,但声音从不播放。这是我的代码:
public class MainActivity extends Activity {
Button button;
TextView text;
final MediaPlayer mp = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
text = (TextView) findViewById(R.id.answer);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
AssetFileDescriptor afd;
afd = getAssets().openFd("myaudio.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
toggleString(v);
}
});
}
public void toggleString(View v) {
if(text.getText().toString().equals(getString(R.string.nothing)))
text.setText(R.string.answer);
else
text.setText(R.string.nothing);
}
这是我的活动 xml 文件:
<TextView
android:id="@+id/answer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/nothing"
android:textSize="40sp"
android:layout_marginTop="40dp"
/>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="130dp"
android:onClick="onClick"
android:text="@string/question"
/>
如果有人可以提供帮助,那就太好了。提前致谢。
编辑:这是我在尝试第二个建议后在控制台中看到的(这是打印堆栈吗?对不起,我不知道那是什么)
[2014-02-08 15:17:14 - ddmlib] An established connection was aborted by the software in your host machine
java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(Unknown Source)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.write(Unknown Source)
at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:642)
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:488)
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:835)
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:803)
at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:763)
at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)
[2014-02-08 15:19:44 - ddms] Can't bind to local 8600 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8602 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8603 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8604 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8605 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8606 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8607 for debugger
[2014-02-08 15:19:44 - ddms] Can't bind to local 8608 for debugger
【问题讨论】:
-
catch中是否出现错误?发布您尝试播放声音时收到的 printStackTrace。
-
我在帖子末尾添加了我看到的内容
-
那是因为创建失败。它永远不会进入准备好的状态。尝试玩游戏时,您仍处于初始状态。我在问你第一次尝试的打印堆栈是什么。
-
我不知道打印堆栈是什么,但我希望我刚刚编辑的就是它。我认为是。
-
第一个建议是正确的。如果它不起作用,您的 myaudio.mp3 可能位于错误的位置。或者您设备上的音量被调低。看看第一个建议中的第一个 try catch 。你看到 e1.printStackTrace();那是允许您的程序不会崩溃,但如果出现错误,则在 log Cat 中输出错误。我相信它应该是红色的。
标签: java android button android-mediaplayer