2012-08-09 136 views
0

我试图制作一个简单的应用程序,播放随机声音,当用户单击按钮时。该应用程序启动没有问题,它会在它崩溃之前播放随机数量的声音。我找不到任何类似的问题/问题,这就是我发布这个问题的原因。应用程序意外停止

这是我的日志:

08-09 10:10:16.706: D/dalvikvm(265): GC freed 571 objects/49008 bytes in 128ms 
08-09 10:10:18.896: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:19.036: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:19.036: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:19.036: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:19.236: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:19.336: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:19.346: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:19.346: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:19.746: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:19.856: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:20.016: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:20.166: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:20.166: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:20.166: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:20.396: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:20.556: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:20.566: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:20.566: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:20.766: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:20.907: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:20.907: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:20.916: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:21.116: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:21.236: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:21.246: W/MediaPlayer(265): info/warning (1, 44) 
08-09 10:10:21.246: I/MediaPlayer(265): Info (1,44) 
08-09 10:10:21.406: W/MediaPlayer(265): info/warning (1, 26) 
08-09 10:10:21.427: E/MediaPlayer(265): error (1, -17) 
08-09 10:10:21.447: D/MediaPlayer(265): create failed: 
08-09 10:10:21.447: D/MediaPlayer(265): java.io.IOException: Prepare failed.: status=0x1 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.media.MediaPlayer.prepare(Native Method) 
08-09 10:10:21.447: D/MediaPlayer(265):  at  android.media.MediaPlayer.create(MediaPlayer.java:644) 
08-09 10:10:21.447: D/MediaPlayer(265):  at com.moer.playsound.MainActivity$1.onClick(MainActivity.java:40) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.View.performClick(View.java:2364) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.View.onTouchEvent(View.java:4179) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.widget.TextView.onTouchEvent(TextView.java:6541) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.View.dispatchTouchEvent(View.java:3709) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.447: D/MediaPlayer(265):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.j ava:1659) 
08-09 10:10:21.447: D/MediaPlayer(265):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
08-09 10:10:21.447: D/MediaPlayer(265):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1 643) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.os.Looper.loop(Looper.java:123) 
08-09 10:10:21.447: D/MediaPlayer(265):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
08-09 10:10:21.447: D/MediaPlayer(265):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-09 10:10:21.447: D/MediaPlayer(265):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-09 10:10:21.447: D/MediaPlayer(265):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
08-09 10:10:21.447: D/MediaPlayer(265):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
08-09 10:10:21.447: D/MediaPlayer(265):  at dalvik.system.NativeStart.main(Native Method) 
08-09 10:10:21.466: D/AndroidRuntime(265): Shutting down VM 
08-09 10:10:21.466: W/dalvikvm(265): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
08-09 10:10:21.476: E/AndroidRuntime(265): Uncaught handler: thread main exiting due to uncaught exception 
08-09 10:10:21.496: E/AndroidRuntime(265): java.lang.NullPointerException 
08-09 10:10:21.496: E/AndroidRuntime(265): at com.moer.playsound.MainActivity$1.onClick(MainActivity.java:41) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.View.performClick(View.java:2364) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.View.onTouchEvent(View.java:4179) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.widget.TextView.onTouchEvent(TextView.java:6541) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.View.dispatchTouchEvent(View.java:3709) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-09 10:10:21.496: E/AndroidRuntime(265): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
08-09 10:10:21.496: E/AndroidRuntime(265): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
08-09 10:10:21.496: E/AndroidRuntime(265): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.os.Looper.loop(Looper.java:123) 
08-09 10:10:21.496: E/AndroidRuntime(265): at android.app.ActivityThread.main(ActivityThread.java:4363) 
08-09 10:10:21.496: E/AndroidRuntime(265): at java.lang.reflect.Method.invokeNative(Native Method) 
08-09 10:10:21.496: E/AndroidRuntime(265): at java.lang.reflect.Method.invoke(Method.java:521) 
08-09 10:10:21.496: E/AndroidRuntime(265): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
08-09 10:10:21.496: E/AndroidRuntime(265): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
08-09 10:10:21.496: E/AndroidRuntime(265): at dalvik.system.NativeStart.main(Native Method) 
08-09 10:10:21.516: I/dalvikvm(265): threadid=7: reacting to signal 3 
08-09 10:10:21.726: I/dalvikvm(265): Wrote stack trace to '/data/anr/traces.txt' 
08-09 10:10:34.156: I/Process(265): Sending signal. PID: 265 SIG: 9 

这是代码:

package com.moer.playsound; 


import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.widget.Button; 
import java.util.Random; 
import android.view.KeyEvent; 
import android.view.View.OnClickListener; 

public class MainActivity extends Activity { 


private final int NUM_SOUND_FILES = 8; 

private int mfile[] = new int[NUM_SOUND_FILES]; 
private Random rnd = new Random(); 
private MediaPlayer mp; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main);   

mfile[0] = R.raw.sound1; 
mfile[1] = R.raw.sound2; 
mfile[2] = R.raw.sound3; 
mfile[3] = R.raw.sound4; 
mfile[4] = R.raw.sound5; 
mfile[5] = R.raw.sound6; 
mfile[6] = R.raw.sound7; 
mfile[7] = R.raw.sound8; 


Button button1 = (Button) findViewById(R.id.button1); 
    button1.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    mp = MediaPlayer.create(MainActivity.this, mfile[rnd.nextInt(NUM_SOUND_FILES)]); 
    mp.seekTo(0); 
    mp.start(); 
    }}); 

} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     finish(); 
return true; 
    } 
return false; 
} 
} 

我使用wav格式,而不是和减少文件的使用量试过,但它不”不要做任何事情。我是新来的,所以任何帮助将不胜感激。

谢谢

+0

是在最后一个结束之前开始下一个声音的时候吗? – 2012-08-09 08:35:18

+0

嗨。声音文件大约10kb。它们持续时间不超过2秒。我发现缓慢的点击率,但仍然崩溃。正如我在下面向Aerrow指出的那样,我点击的速度越快,崩溃越快。 – user1585966 2012-08-09 09:44:50

回答

1

嗨尝试用这个,

import java.util.Random; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private static final int[] SOUNDS = new int[] { R.raw.sound1, R.raw.sound2, 
      R.raw.sound3, R.raw.sound4, R.raw.sound5, R.raw.sound6, 
      R.raw.sound7, R.raw.sound8 }; 

    // private int mfile[] = new int[NUM_SOUND_FILES]; 
    private Random rnd = new Random(); 
    private MediaPlayer mp; 
    int flag = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       if (flag == 0) { 
        Log.v("Flag Values is", flag + ""); 
        audioPlaying(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "player is currently Playing", Toast.LENGTH_LONG) 
          .show(); 
        mp.stop(); 
        mp.release(); 
        flag = 0; 
        audioPlaying(); 
       } 

      } 
     }); 
     // Button button2 = (Button) findViewById(R.id.button2); 
     // button2.setOnClickListener(new OnClickListener() { 
     // public void onClick(View v) { 
     // 
     // mp.stop(); 
     // mp.release(); 
     // 
     // } 
     // }); 
    } 

    protected void audioPlaying() { 
     // TODO Auto-generated method stub 
     int sndToPlay = rnd.nextInt(SOUNDS.length); 
     mp = MediaPlayer.create(MainActivity.this, SOUNDS[sndToPlay]); 
     mp.seekTo(0); 
     mp.start(); 
     flag++; 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 

      finish(); 
      return true; 
     } 
     return false; 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     // deallocate all memory 
     if (mp != null) { 
      if (mp.isPlaying()) { 
       mp.stop(); 
      } 
      mp.release(); 
      mp = null; 
     } 
    } 
} 
+0

@ user1585966:注意我的代码,在这里我使用了两个按钮,为了我的方便,一个用于开始付款,另一个用于停止播放器。根据您的需要更改此代码。 – Aerrow 2012-08-09 08:59:42

+0

谢谢。快速服务在这里我可能会说:) – user1585966 2012-08-09 09:39:59

+0

我试着改变代码,但我仍然得到相同的结果。声音文件大约10kb。我不确定,但它看起来像点击按钮的速度越快,它越早崩溃。 – user1585966 2012-08-09 09:42:43

-2

在哪行代码41是无效的一部分?

+0

这应该是一个评论 – BBdev 2012-08-09 09:33:52

+0

我不确定你的意思?在日志文件或代码中? – user1585966 2012-08-09 09:52:44

+0

在日志记录中,有关于活动的第41行上的nullPointerException的注释。 '08-09 10:10:21.496:E/AndroidRuntime(265):java.lang.NullPointerException 08-09 10:10:21.496:E/AndroidRuntime(265):at com.moer.playsound.MainActivity $ 1.onClick (MainActivity.java:41)' – 2012-08-09 11:24:45