找不到此NullPointerException

问题描述

| 我不断收到
Unable to instantiate activity ComponentInfo... Caused by a NullPointerException at findViewById
,我不知道为什么扔它。我在我的ѭ1correctly中正确设置了我的元素id,并且我尝试注释掉抛出错误的每一行,以查看哪一行是有问题的,但是要使其不带任何强制闭合运行,我必须全部注释掉程序的功能。这是我的活动:
package fsg.dev.test.checkBoxtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedchangelistener;
import android.widget.SeekBar;

public class checkBoxTest extends Activity {
    private CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
    //private SeekBar seekbar = (SeekBar) findViewById(R.id.seekbar);
    private View view = (View) findViewById(R.id.background);

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    checkBox.setonCheckedchangelistener(new OnCheckedchangelistener(){
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
            changeColor();
        }
    });
}

private void changeColor(){
    if(checkBox.isChecked()){
        view.setBackgroundColor(R.color.Blue);
        //view.setAlpha(.25);
    }
    else if(!checkBox.isChecked()){
        view.setBackgroundColor(R.color.White);
    }
}
} 这是我的清单:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"
  package=\"fsg.dev.test.checkBoxtest\"
  android:versionCode=\"1\"
  android:versionName=\"1.0\">
<uses-sdk android:minSdkVersion=\"10\" />

<application android:icon=\"@drawable/icon\" android:label=\"@string/app_name\" android:debuggable=\"true\">
    <activity android:name=\".checkBoxTest\"
              android:label=\"@string/app_name\">
        <intent-filter>
            <action android:name=\"android.intent.action.MAIN\" />
            <category android:name=\"android.intent.category.LAUNCHER\" />
        </intent-filter>
    </activity>
</application>
</manifest>
最后是我的main.xml:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:orientation=\"vertical\"
android:layout_width=\"fill_parent\"
android:layout_height=\"fill_parent\">

<CheckBox 
    android:text=\"Background Color\" 
    android:layout_width=\"wrap_content\" 
    android:layout_height=\"wrap_content\" 
    android:checked=\"false\"
    android:id=\"@+id/checkBox\">
</CheckBox>
<SeekBar 
    android:layout_height=\"wrap_content\" 
    android:layout_width=\"fill_parent\"
    android:id=\"@+id/seekbar\" 
    android:layout_margin=\"10dip\" >
</SeekBar>
<View
    android:layout_width=\"fill_parent\"
    android:layout_height=\"fill_parent\"
    android:background=\"@color/White\"
    android:id=\"@+id/background\">
</View>
</LinearLayout>
如果有人可以帮助我缩小范围,那将是很好的。     

解决方法

您只需在
setContentView
之后使用
findViewById
....
public class checkBoxTest extends Activity {
    private CheckBox checkbox;
    private View view;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    checkbox = (CheckBox) findViewById(R.id.checkbox);
    view = (View) findViewById(R.id.background);
    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
            changeColor();
        }
    });
}
...
    ,调用setContentView(R.layout.main)后,需要在onCreate()方法中调用findViewById,因为在XML扩展到其各自的Java对象之后,UI对象才存在。     ,将对findViewById的调用移到OnCreate方法中。     ,这个实例化
private CheckBox checkbox = (CheckBox) findViewById(R.id.checkbox);
    //private SeekBar seekbar = (SeekBar) findViewById(R.id.seekbar);
    private View view = (View) findViewById(R.id.background);
应该进来onCreate的方法。     ,首先要做的是设置活动的内容,然后,您可以从该内容中获取所有视图,因此将代码替换为:
public class checkBoxTest extends Activity {
    private CheckBox checkbox ;
    private View view ;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
//first,set the content of your activity
        setContentView(R.layout.main);
    //Second,get yours Views 
     checkbox = (CheckBox) findViewById(R.id.checkbox);
     view = (View) findViewById(R.id.background);

        checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
                changeColor();
            }
        });
    }
....