2012-08-07 117 views
1

我在學習android,所以我編寫了這段代碼來切換電話鈴聲模式。代碼編譯沒有問題,我在Android Manifest中輸入內容,將內容視圖設置爲所需的佈局,但是我運行此應用程序,出現Force關閉錯誤。誰能告訴我,爲什麼會出現強制關閉錯誤,以便在未來的我應該是找出問題myself.Here是代碼:Android仿真器中的FORCE CLOSE錯誤

package com.umer.practice2; 

import android.R.bool; 
import android.app.Activity; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.ToggleButton; 

public class RingerMode extends Activity implements View.OnClickListener { 

ToggleButton tb; 
ImageView Riv; 
TextView tv; 
AudioManager mRing; 
boolean silent; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ringermode); 

    tb.setOnClickListener(this); 
    InitializeShit(); 

    mRing=(AudioManager) getSystemService(AUDIO_SERVICE); 
} 

private void InitializeShit() { 
    // TODO Auto-generated method stub 
    tb= (ToggleButton) findViewById(R.id.ringTB); 
    tv= (TextView) findViewById(R.id.ringTV); 
    Riv= (ImageView) findViewById(R.id.ringIV); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    checkMode(); 
    if(silent) 
    { 
     Riv.setImageResource(R.drawable.mysplash); 
    }else 
     { 
      Riv.setImageResource(R.drawable.myscreen); 
     } 
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    checkMode(); 
} 

private void checkMode() { 
    // TODO Auto-generated method stub 
    int temp = mRing.getRingerMode(); 
    if(temp==AudioManager.RINGER_MODE_SILENT) 
    { 
     tv.setText("Silent"); 
     Riv.setImageResource(R.drawable.mysplash); 
     silent= true; 
    }else 
     if(temp==AudioManager.RINGER_MODE_NORMAL) 
     { 
      tv.setText("Normal"); 
      Riv.setImageResource(R.drawable.myscreen); 
      silent= false; 
     } 
    } 

非常感謝

回答

2

你需要看一看在logcat的看看會發生什麼。見Logcat | Android Developers

找到崩潰的堆棧跟蹤,它指向您的問題。如果你自己弄不清楚,請在你的問題中複製/粘貼logcat。

在這個非常的情況下,要初始化之前引用tb

tb.setOnClickListener(this); 

在這一點上,tb仍然null,所以NullPointerException發生。此外

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ringermode); 


    InitializeShit(); 
    tb.setOnClickListener(this); 

    mRing=(AudioManager) getSystemService(AUDIO_SERVICE); 
} 

,我建議使用有關方法和變量命名Java的約定:爲了解決這個問題,更改代碼這樣

  • 類先從資金:如MyClass
  • 變量以小寫字母開頭:例如myVariable
  • 方法以小寫字母開頭:例如myMethod()

這樣可以避免您後來的困惑。