2011-03-14 118 views
0

我不知道崩潰的原因。android上的應用程序崩潰

package com.tct.soundTouch; 

//imports();;;;;;; 

    public class Main extends Activity implements OnClickListener{ 

     private MediaPlayer mp; 
     private MotionEvent event; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      setContentView(R.layout.main); 

      final ImageButton zero = (ImageButton) this.findViewById(R.id.button); 
      zero.setOnClickListener(this); 

      mp = MediaPlayer.create(this, R.raw.sound); 

     } 


     public void onClick(View v) { 
      switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 
       mp.setLooping(true); 
       mp.start(); 
       break; 

      case MotionEvent.ACTION_UP: 
       mp.pause(); 
       break; 

      } 
     } 

    } 

日誌 enter image description here

感謝

+0

這是34行嗎? – Farrell 2011-03-14 16:36:19

+0

第34行:switch(event.getAction()){ – anvd 2011-03-14 16:40:20

+0

現在我100%確定我的回答是正確的:D – RoflcoptrException 2011-03-14 16:41:57

回答

1

我沒有看到event在您發佈的代碼中設置爲非空值。不幸的是,通過OnClickListener收到的點擊事件沒有「向上」或「向下」。如果您需要處理MotionEvent.UPMotionEvent.DOWN,那麼你應該實現View.OnTouchListener

public void onClick(View v) { 
    if (mp.isPlaying()) { 
     mp.pause(); 
    } else { 
     mp.setLooping(true); 
     mp.start(); 
    } 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      mp.setLooping(true); 
      mp.start(); 
      return true; 
     case MotionEvent.ACTION_UP: 
      mp.pause(); 
      return true; 
    } 
    return false; 
} 

如果你正在尋找一個肘般的效果,你可以使用MediaPlayer#isPlaying()然後將其設置爲使用setOnTouchListener

zero.setOnTouchListener(this);

+0

感謝您的回答。但我需要使用事件ACTION_UP和ACTION_DOWN。當按下按鈕時,播放聲音,當btn沒有按下音樂停止時 – anvd 2011-03-14 16:54:28

+0

我只是改變爲onTouch,謝謝 – anvd 2011-03-14 17:04:16

+0

是的,這是我將使用的解決方案:) – anvd 2011-03-14 17:06:14

2

我認爲這個問題是在該行switch (event.getAction()) {。你在哪裏初始化事件?我認爲這會導致NullPointerException。

Btw ...你不應該命名你的類的主要。至少使用Main。

+0

我在代碼中使用了:private MotionEvent event;所以它被定義。 謝謝 – anvd 2011-03-14 16:37:11

+0

@費爾是的,但沒有初始化 – RoflcoptrException 2011-03-14 16:37:34

+0

所以,你有什麼建議?我如何初始化事件? – anvd 2011-03-14 16:41:59