0

我正在使用 Donn Felker 的 Android Application Development for Dummies 一书。具体来说,我正在使用静音模式应用程序。

逐步按照说明进行操作应该很简单,但事实证明我什至无法在不使应用程序崩溃的情况下启动主要活动。我一定已经检查了我的代码十几次,但我仍然无法找出问题所在,并让它在没有 LogCat 疯狂触发错误的情况下工作。

调试设备是带有 Android 4.0.3 的三星 Galaxy SII。

这是 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 

您试图在为 Activity 设置布局之前找到 Button ,因此在设置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 回答