Сбой приложения на андроид - PullRequest
0 голосов
/ 14 марта 2011

Я не знаю причину сбоя.

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 ]

2 голосов
/ 14 марта 2011

Я думаю, что проблема в линии switch (event.getAction()) {.Где вы инициализировали событие?Я думаю, что это вызывает исключение NullPointerException.

Кстати ... Вы не должны называть свой класс main.Используйте Main как минимум.

1 голос
/ 14 марта 2011

Я не вижу, чтобы event был установлен в ненулевое значение в коде, который вы разместили.К сожалению, нет никакого «вверх» или «вниз» для события щелчка, полученного через OnClickListener.

Если вы ищете эффект, подобный переключению, вы можете использовать MediaPlayer#isPlaying():

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

Если вам нужно обработать MotionEvent.UP и MotionEvent.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);

...