Я работаю над Android Studio 3.1.3.
Мое приложение состоит из восьми кнопок. Я пытаюсь передать более одной кнопки в качестве аргументов метода onClick
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
pauseAudio(audioTwo, audioThree, audioFour, audioFive, audioSix, audioSeven, audioEight);
mediaPlayer = MediaPlayer.create(this,R.raw.birds);
mediaPlayer.start();
break;
to pauseAudio метод,
public void pauseAudio(View view, Button audioOne, Button audioTwo, Button audioThree, Button audioFour, Button audioFive, Button audioSix, Button audioSeven, Button audioEight){
if (audioOne.isEnabled()
|| audioTwo.isEnabled()
|| audioThree.isEnabled()
|| audioFour.isEnabled()
|| audioFive.isEnabled()
|| audioSix.isEnabled()
|| audioSeven.isEnabled()
|| audioEight.isEnabled()){
if (mediaPlayer.isPlaying() && mediaPlayer!=null){
mediaPlayer.stop();
}
}
}
это ошибка, которая появляется, когда я наводю курсор на подчеркнутый текст

Я предполагаю, что то, как я передаю аргумент, не является правильным, поэтому, пожалуйста, помогите мне. Заранее спасибо.
Опубликуйте трассировку стека сбоя.
в логах ничего нет. Пусто.
@LoneWolf Какое у вас устройство? Похоже, вы используете Huawei
@LoneWolf Кроме того, вы даже не передаете audioSeven и audioEight. Прежде всего, удалите ссылку «this» перед вызовами методов представления.
@AntonioVlasic, какой в этом смысл? Хотя я запускаю его на эмуляторе Android.
@AntonioVlasic, когда я добавляю audioSeven и audioEight, программа даже не компилируется.
@LoneWolf Я думал, что вы используете Huawei, так как вы не видите журнал сбоев. Проверьте мой ответ, может поможет. Обратите внимание, что я переместил вперед «mediaPlayer! = Null», возможно, он не инициализирован.




Возможно, если вы опубликуете журнал после сбоя, мы сможем вам лучше помочь. но я уже вижу элемент управления, который может дать сбой
if (mediaPlayer.isPlaying () && mediaPlayer! = null) {
mediaPlayer.stop ();
}
. вы можете сначала проверить, работает ли mediaPlayer! = null перед mediaPlayer.isPlaying () следующим образом:
if (mediaPlayer! = null && mediaPlayer.isPlaying ()) {
mediaPlayer.stop ();
}
Нет, работает отлично. Приложение начало вылетать после того, как я передал более одной кнопки в качестве аргументов. Также мой логарифм пуст, там ничего нет. IDK как: /
Чтобы сделать ваш код проще и, надеюсь, работать, попробуйте следующее:
public void pauseAudio(View... views) {
for(View view : views) {
if (view.isEnabled()) {
if (mediaPlayer!=null && mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
}
}
Теперь вы можете назвать это так:
pauseAudio(audioOne, audioTwo, audioThree, ...);
Обновлено:
Возможно, также проверьте, не инициализировано ли представление:
if (view != null && view.isEnabled())
Обновлено еще раз:
Рад слышать, что это сработало :) Вот объяснение получше:
public void pauseAudio(View... views) { //Allow a dynamic initialization of an array of Views
for(View view : views) { //Loop through the array
if (view != null && view.isEnabled()) { //If the current view is not null and enabled
if (mediaPlayer!=null && mediaPlayer.isPlaying()){ //If the MediaPlayer is not null and playing
mediaPlayer.stop(); //Stop the MediaPlayer
}
break; //Break the loop, as we have reached our usecase
}
}
}
Это сработало, спасибо. Не могли бы вы объяснить, что вы там делали?
Отлично! Я снова обновил свой ответ, чтобы вы могли понять код. Если вам снова понадобится помощь, вы можете связаться со мной в Twitter: @Antitized
Лучше бы выложить сюда котик журнала приложений с вылетом. Теоретически вы все делаете правильно: вам нужно настроить OnClickListener (this) для каждой имеющейся у вас кнопки. И внедрите OnClickListener в свою активность (фрагмент), тогда, когда вы это сделали, вам понадобится условие переключения и проверьте view.id