Java Android Emulator中的强制关闭错误

Java Android Emulator中的强制关闭错误,java,android,emulation,Java,Android,Emulation,我正在学习android,所以我写了这段代码只是为了切换手机铃声模式。代码编译没有问题,我在Android Manifest中输入,将内容视图设置为所需的布局,但我运行此应用程序时,遇到强制关闭错误。有人能告诉我为什么会发生强制关闭错误,以便将来我自己解决问题。下面是代码: package com.umer.practice2; import android.R.bool; import android.app.Activity; import android.media.AudioManag

我正在学习android,所以我写了这段代码只是为了切换手机铃声模式。代码编译没有问题,我在Android Manifest中输入,将内容视图设置为所需的布局,但我运行此应用程序时,遇到强制关闭错误。有人能告诉我为什么会发生强制关闭错误,以便将来我自己解决问题。下面是代码:

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;
        }
    }

非常感谢

您需要查看日志,看看会发生什么。看

找到崩溃的痕迹,它指向你的问题。如果你自己无法理解,请在你的问题中复制/粘贴日志

在这种情况下,您在初始化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()
这将使您避免以后的困惑