Проверьте состояние кнопки ToogleButton из другого класса. - PullRequest
0 голосов
/ 10 марта 2020

Я хотел бы знать, как я могу попросить мое приложение проверить, проверены ли мои кнопки переключения или нет, чтобы при нажатии кнопки воспроизведения приложение воспроизводило звук только для проверенных кнопок переключения. (Например, если кнопки 1 и 3 проверены, когда я нажимаю кнопку воспроизведения, она должна делать «Звук, тишина, звук, тишина» и l oop, пока я не нажму стоп).

Проблема в том, что сейчас, когда я нажимаю кнопку воспроизведения, мое приложение закрывается, и я получаю ошибку "Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference".

Я не знаю, как решить эту проблему. Вот мой код:

MainActivity:

public class MainActivity extends AppCompatActivity {


public ToggleButton button1, button2, button3, button4;
public Sampler mySample;
public ImageButton playButton;
public ImageButton stopButton;
public boolean playing;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    playButton = (ImageButton) findViewById(R.id.play);
    stopButton = (ImageButton) findViewById(R.id.stop);

    button1 = (ToggleButton) findViewById(R.id.button1);
    button2 = (ToggleButton) findViewById(R.id.button2);
    button3 = (ToggleButton) findViewById(R.id.button3);
    button4 = (ToggleButton) findViewById(R.id.button4);

    mySample = new Sampler(this);


    playButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            mySample.play();
        }
    });

    stopButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            mySample.stop();
        }
    });
}

Класс сэмплера:

public class Sampler extends Activity {

SoundPool sp;
private int snareId;
private Context mycontext;
public boolean playing;
public ToggleButton button1, button2, button3, button4;



public Sampler(Context appcontext) {

    this.mycontext = appcontext;

    sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

    snareId = sp.load(mycontext, R.raw.snare, 1);


}


public void play() {

    playing = true;
    while (playing) {
        if (button1.isChecked()) {
            sp.play(snareId, 10, 10, 1, 0, 1);
            try {
                Thread.sleep(60000 / (120 * 4));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (button2.isChecked()) {
            sp.play(snareId, 10, 10, 1, 0, 1);
            try {
                Thread.sleep(60000 / (120 * 4));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (button3.isChecked()) {
            sp.play(snareId, 10, 10, 1, 0, 1);
            try {
                Thread.sleep(60000 / (120 * 4));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (button4.isChecked()) {
            sp.play(snareId, 10, 10, 1, 0, 1);
            try {
                Thread.sleep(60000 / (120 * 4));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if(!playing){
                break;
        }
    }
}


public void stop(){

    playing = false;
}

1 Ответ

0 голосов
/ 10 марта 2020

В Sampler классе button1 не инициализируется, что приводит к ошибке null object reference. Чтобы связать с MainActivity button1, попробуйте следующее:

button1 = (((Activity)mycontext).findViewById(R.id.button1));
...