【问题标题】:FORCE CLOSE error in Android EmulatorAndroid 模拟器中的 FORCE CLOSE 错误
【发布时间】:2012-08-07 20:23:07
【问题描述】:

我正在学习 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;
        }
    }

非常感谢

【问题讨论】:

    标签: java android emulation


    【解决方案1】:

    您需要查看 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()

    这将使您以后免于困惑。

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 2021-11-06
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2012-01-28
      • 2011-06-18
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多