2013-02-14 31 views
0

我正在与Donn Felker一起编写Android应用程序开发傻瓜书。具体来说,我正在使用静音模式应用程序。做Android安静模式应用程序,甚至不能启动主要活动?

它应该很简单,按照指示一步一步,但事实证明,我甚至无法启动主要活动,而不会崩溃的应用程序。我一定会忘记我的代码十几次,但我仍然无法弄清楚什么是错误的,并且在没有LogCat发布错误的情况下工作就像疯了一样。

调试设备是Samsung Galaxy SII w/Android 4.0.3。

这里的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); 

} 

我试图调试,但我还没有发现问题。请帮忙。

+0

logcat显示什么错误?你在哪里初始化你的按钮? – Ryan 2013-02-14 18:31:01

回答

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 
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); 
    .... 
相关问题