Почему эти символы не могут быть найдены? - PullRequest
0 голосов
/ 06 марта 2019

ОК, на этот раз выпуск андроид-студий. Просто для заметки, это не то задание, которое я должен выполнить, я просто пытаюсь завершить пример в этой главе.

Похоже, что ошибка происходит с переменными bUkulele и bDrums в файле PlayMusic.java, но я не могу понять, почему.

package net.androidbootcamp.alohamusic;

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class PlayMusic extends AppCompatActivity {

    Button button1, button2;
    MediaPlayer mpUkulele, mpDrums;
    int playing;


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

        button1 = (Button) findViewById(R.id.btnUkulele);
        button2 = (Button) findViewById(R.id.btnDrums);
        button1.setOnClickListener(bUkulele);
        button2.setOnClickListener(bDrums);
        mpUkulele = new MediaPlayer();
        mpUkulele = MediaPlayer.create(this, R.raw.ukulele);
        mpDrums = new MediaPlayer();
        mpDrums = MediaPlayer.create(this, R.raw.drums);
        playing = 0;

        Button.OnClickListener bUkulele = new Button.OnClickListener() {
            @Override
            public void onClick(View V) {
                switch (playing) {
                    case 0:
                        mpUkulele.start();
                        playing = 1;
                        button1.setText("Pause Ukulele Song");
                        button2.setVisibility(View.INVISIBLE);
                        break;
                    case 1:
                        mpUkulele.pause();
                        playing = 0;
                        button1.setText("Play Ukulele Song");
                        button2.setVisibility(View.VISIBLE);
                        break;
                }
            }

            ;

            Button.OnClickListener bDrums = new Button.OnClickListener() {
                @Override
                public void onClick(View V) {
                    switch (playing) {
                        case 0:
                            mpDrums.start();
                            playing = 1;
                            button2.setText("Pause Drums Song");
                            button1.setVisibility(View.INVISIBLE);
                            break;
                        case 1:
                            mpDrums.pause();
                            playing = 0;
                            button2.setText("Play Drums Song");
                            button1.setVisibility(View.VISIBLE);
                            break;
                    }
                }
            };
        };
    }
}

Я получаю ошибку:

"ошибка: не удается найти переменную символа bUkulele" "ошибка: не удается найти символьную переменную bDrums"

Я вернулся к этой главе, но не могу найти других случаев, когда эти переменные были созданы или вызваны, кроме как в этом файле .java.

Возможно ли, что код должен отличаться из-за более новой версии Android Studio, потому что я знаю, что наш учебник устарел?

Ответы [ 3 ]

3 голосов
/ 06 марта 2019

Похоже, что ошибка происходит с переменными bUkulele и bDrums в файле PlayMusic.java, но я не могу понять, почему.

Это потому, что вы пытаетесь использовать объекты до того, как определили их.

Объяснение с примером из реального мира:

Джон ходит

Джон ест яблоко

Джон хватает яблоко

Что будет есть Джон? Что-нибудь, потому что он еще не схватил яблоко, поэтому я рекомендую вам поставить эти предметы перед тем, как вы их называете.

Итак, Джон может съесть яблоко:)

Кстати: существует множество более простых способов создания setOnClickListener(), посмотрите здесь

1 голос
/ 06 марта 2019

Ваша проблема в том, что вы пытаетесь добавить переменные bUkulele и bDrums в качестве onClickListeners, прежде чем определять их. Если вы перенесете их инициализацию до использования переменных, это должно сработать.

0 голосов
/ 08 марта 2019

Хорошо, спасибо всем за предложения.

Только за запись, которую я пытался определить переменные заранее.Это было первое предложение Android Studio, и оно не сработало.Я получил ту же ошибку.

Однако я нашел проблему.Оказывается, некоторые скобки были в неправильном месте в конце - вот и все.Я переместил их, и теперь программа работает отлично.

...