0

私はドン・フェルカーの 『ダミーのためのAndroidアプリケーション開発』の本を扱っています。具体的には、サイレントモードアプリを使用しています。

手順を1つずつ実行するのは簡単なはずですが、結局のところ、アプリをクラッシュさせずにメインアクティビティを開始することすらできません。私は自分のコードを何十回も調べたに違いありませんが、それでも何が悪いのかを理解して、LogCatが狂ったようにエラーを発生させずにコードを機能させることはできません。

デバッグデバイスは、Android4.0.3を搭載したSamsungGalaxySIIです。

これがMainAcitivityクラスです

public class MainActivity extends Activity {

Button m_toggleButton = (Button)findViewById(R.id.toggleButton);
AudioManager m_audio = (AudioManager)getSystemService(AUDIO_SERVICE);
boolean m_isPhoneSilent;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    checkMode();
    toggleImage();
    generateClick();
}

@Override
protected void onResume()
{
    super.onResume();
    checkMode();
    toggleImage();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;


}

private void checkMode()
{
    m_audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    switch(m_audio.getRingerMode())
    {
        case AudioManager.RINGER_MODE_NORMAL:
            m_isPhoneSilent = false;
            break;
        case AudioManager.RINGER_MODE_SILENT:
            m_isPhoneSilent = true;
            break;
    }

}

private void generateClick()
{
    m_toggleButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            if (m_isPhoneSilent == true)
                {
                    m_audio.setRingerMode
                    (AudioManager.RINGER_MODE_NORMAL);
                    m_isPhoneSilent = false;
                }
            else
                {
                    m_audio.setRingerMode
                    (AudioManager.RINGER_MODE_SILENT);
                    m_isPhoneSilent = true;
                }
            toggleImage();
        }
    });
}

private void toggleImage()
{
    ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
    Drawable newAsset;

    if (m_isPhoneSilent == true)
    {
        newAsset = getResources().getDrawable(R.drawable.phone_silent);
    }
    else
    {
        newAsset = getResources().getDrawable(R.drawable.phone_on);
    }

    imageView.setImageDrawable(newAsset);

}

デバッグを試みましたが、問題は見つかりませんでした。助けてください。

4

2 に答える 2

0
public class MainActivity extends Activity {

Button m_toggleButton = (Button)findViewById(R.id.toggleButton); //<<<< here
//....your code 

アクティビティのレイアウトを設定する前にボタンを見つけようとしているので、次のように設定した後にボタンを移動しますsetContentView

public class MainActivity extends Activity {

Button m_toggleButton ;
AudioManager m_audio;
boolean m_isPhoneSilent;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     m_toggleButton = (Button)findViewById(R.id.toggleButton);
    m_audio = (AudioManager)getSystemService(AUDIO_SERVICE);
   ///... your code here
于 2013-02-14T18:32:30.280 に答える
0

あなたはこれを呼び出すことはできません

Button m_toggleButton = (Button)findViewById(R.id.toggleButton);
AudioManager m_audio = (AudioManager)getSystemService(AUDIO_SERVICE);

setContentViewこれに変更する前に:

Button m_;
AudioManager m_audio;
boolean m_isPhoneSilent;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    m_toggleButton = (Button)findViewById(R.id.toggleButton);
    m_audio = (AudioManager)getSystemService(AUDIO_SERVICE);
    ....
于 2013-02-14T18:32:52.960 に答える