应用程序崩溃在android上

时间:2011-03-14 16:31:05

标签: java android button crash onclick

我不知道坠机的原因。

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

感谢

2 个答案:

答案 0 :(得分:2)

我认为问题出在switch (event.getAction()) {行。你在哪里初始化事件?我认为这会导致NullPointerException。

顺便说一下......你不应该把你的班级命名为主。至少使用Main。

答案 1 :(得分:1)

我没有看到event在您发布的代码中设置为非空值。不幸的是,通过OnClickListener收到的点击事件没有“向上”或“向下”。

如果您正在寻找类似切换的效果,可以使用MediaPlayer#isPlaying()

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

如果您需要处理MotionEvent.UPMotionEvent.DOWN,那么您应该实施View.OnTouchListener

@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;
}

然后使用setOnTouchListener

进行设置

zero.setOnTouchListener(this);