2013-04-06 37 views
1

我在我的鈴聲應用程序中使用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]); 
    stopPlaying(); 
    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();   
     } 
     }); 
} 

private void stopPlaying() { 
    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    }} 

錯誤日誌; (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是否爲空,如果是這樣,請再次嘗試或通知用戶聲音無法播放。 – FoamyGuy 2013-04-06 14:51:32

+0

它不在裏面oncreate(編輯) – 2013-04-06 14:52:58

+0

什麼是60行? – 2013-04-06 14:53:19

回答

6

線60上即mediaplayer.start()的NPE(空指針異常)即將因爲它是尋找媒體播放器爲空。因此,一個方法是把一個空的選項檢查有

if(mediaplayer != null){ 
mediaplayer.start(); 
} 

的NPE來了,因爲從原始的聲音文件創建媒體播放器是在某些設備發生故障。

此外,你需要停止()和釋放()媒體播放器中的MediaPlayer的onCompletionListener所以它不會因爲清理資源的失敗的失敗,因爲鏈路中提到: - MediaPlayer->create

EG->

MediaPlayer mediaplayer = MediaPlayer.create(this, R.raw.sound1);   
if(mediaplayer == null) {    
    Log.v(TAG, "Create() on MediaPlayer failed.");  
} else { 
    mediaplayer.setOnCompletionListener(new OnCompletionListener() { 

    @Override 
     public void onCompletion(MediaPlayer mediaplayer) { 
      mediaplayer.stop(); 
      mediaplayer.release(); 
     } 
    }); 
    mediaplayer.start(); 

} 
+0

? – 2013-04-06 15:39:53

+0

是的。裏面的按鈕onclick()。請接受它是否有效。 – maveroid 2013-04-06 15:48:34

+0

謝謝,它的工作原理 – 2013-04-06 19:48:13