找不到这个NullPointerException

时间:2011-05-26 14:47:23

标签: android android-layout nullpointerexception android-manifest

我一直得到一个Unable to instantiate activity ComponentInfo... Caused by a NullPointerException at findViewById,我无法找出它为什么扔它。我已经在我的main.xml中正确设置了我的元素ID,并且我已经尝试在每条线周围注释掉它以查看哪条线有问题但要让它运行w / o任何力量关闭我必须注释掉程序的所有功能。这是我的活动:

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>

如果有人能帮助我缩小范围,那将是非常好的。

5 个答案:

答案 0 :(得分:9)

您只需在findViewById之后使用setContentView

....
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();
        }
    });
}
...

答案 1 :(得分:2)

在调用setContentView(R.layout.main)之后,需要在onCreate()方法中调用findViewById,因为在将XML扩展到各自的Java对象之前,UI对象将不存在。

答案 2 :(得分:1)

将您对findViewById的调用移至OnCreate方法。

答案 3 :(得分:1)

此实例化

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的方法。

答案 4 :(得分:0)

首先要做的是设置活动的内容,然后,您可以从该内容中获取所有视图,因此请用以下代码替换您的代码:

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();
            }
        });
    }
....