1. ホーム
  2. java

[解決済み] switch case文のエラー: case式は定数式でなければならない

2022-06-25 13:20:45

質問

昨日までswitch-case文は全く問題なく動作していました。しかし、今朝早くコードを実行すると、eclipseはcase文に赤色の下線を引いて、「case式は定数式でなければなりません、それは定数です」とエラーを出しました。以下は私のコードです。

public void onClick(View src)
    {
        switch(src.getId()) {
        case R.id.playbtn:
            checkwificonnection();
            break;

        case R.id.stopbtn:
            Log.d(TAG, "onClick: stopping srvice");
            Playbutton.setImageResource(R.drawable.playbtn1);
            Playbutton.setVisibility(0); //visible
            Stopbutton.setVisibility(4); //invisible
            stopService(new Intent(RakistaRadio.this,myservice.class));
            clearstatusbar();
            timer.cancel();
            Title.setText(" ");
            Artist.setText(" ");
            break;

        case R.id.btnmenu:
            openOptionsMenu();
            break;
        }
    }

R.id.intはすべて赤の下線が引かれています。

どのように解決するのですか?

通常のAndroidプロジェクトでは、リソースRクラスの定数はこのように宣言されています。

public static final int main=0x7f030004;

しかし、ADT14では、ライブラリプロジェクトでは、このように宣言されます。

public static int main=0x7f030004;

言い換えれば、ライブラリプロジェクトでは定数はfinalではありません。 したがって、あなたのコードはもはやコンパイルされないでしょう。

これに対する解決策は簡単です。switchステートメントをif-elseステートメントに変換します。

public void onClick(View src)
{
    int id = src.getId();
    if (id == R.id.playbtn){
        checkwificonnection();
    } else if (id == R.id.stopbtn){
        Log.d(TAG, "onClick: stopping srvice");
        Playbutton.setImageResource(R.drawable.playbtn1);
        Playbutton.setVisibility(0); //visible
        Stopbutton.setVisibility(4); //invisible
        stopService(new Intent(RakistaRadio.this,myservice.class));
        clearstatusbar();
        timer.cancel();
        Title.setText(" ");
        Artist.setText(" ");
    } else if (id == R.id.btnmenu){
        openOptionsMenu();
    }
}

http://tools.android.com/tips/non-constant-fields

を素早く変換することができます。 switch ステートメントを if-else ステートメントに変換します。

Eclipseでは

カーソルを switch キーワードにカーソルを合わせ Ctrl + 1 で、選択

switch」を「if-else」に変換する。

Android Studioでは

カーソルを switch キーワードにカーソルを合わせ Alt + Enter で、選択

switch」を「if」に置き換えてください。