2013-02-04 40 views
0

我在我的应用程序中使用mediaplayer(mp3铃声)。我的应用程序工作正常,但我看到在谷歌Play开发者控制台(仅适用于某些用户)错误报告哪里出了问题,我不知道,谢谢你(我测试的每一个声音)Mediaplayer NullPointerException

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    soundname= new String[] {"Sound1","Sound2","Sound3","Sound4","Sound5","Sound6"}; 
    soundfile= new int[] {R.raw.sound1,R.raw.sound2,R.raw.sound3,R.raw.sound4,R.raw.sound5,R.raw.sound6}; 

    this.setContentView(R.layout.single_list_item_view); 

    TextView txtProduct = (TextView) findViewById(R.id.product_label); 
    Intent intent = getIntent(); 
    int position = intent.getExtras().getInt("position"); 

    txtProduct.setText(soundname[position]); 
    mediaPlayer = MediaPlayer.create(this, soundfile[position]); 

    Button btnplay= (Button) findViewById(R.id.btnoynat); 
    btnplay.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View arg0) { 
       mediaPlayer.start();   
     } 
     }); 

错误日志; (mediaPlayer.start(); - > SingleListItem.java:60)

java.lang.NullPointerException 
at com.zilsesleri.SingleListItem$1.onClick(SingleListItem.java:60) 
at android.view.View.performClick(View.java:2538) 
at android.view.View$PerformClick.run(View.java:9152) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3693) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
at dalvik.system.NativeStart.main(Native Method) 
+0

您的mediaPlayer值为空。检查MediaPlayer.create的返回值,并查看它是否返回null。它在任何错误上都会这样做。最有可能你的资源不好,但如果你有太多以前未发布的媒体播放器,也可能导致问题。 –

+0

也许这发生在人们点击“太快”之前,您的媒体播放器加载?那么在调用之前,您应该看看您的媒体播放器是否准备就绪。 – psykhi

回答

0
的Android

只能分配一定数量的MediaPlayer对象,这需要devloper释放一次用它做任何MediaPlayer对象,通过调用mediaPlayer.release();

不幸的是,许多开发人员并没有这样做,这会导致MeadiaPlayer对象池返回null而不是分配新对象。

想了解更多关于这一点:MediPlayer API

无论如何,你可能要检查null和适合于您的应用程序的方式处理这个问题。