Android:Nullpointer问题

时间:2012-10-09 07:18:25

标签: android

我的Nullpointer预感让我难过。我在FindViewByID上得到nullpointer异常。这是我的一段代码

public class numberActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.number);

}    

ImageView portrait = (ImageView) findViewById(R.id.numberImage);
public void numberClick(View v) {   
    switch(v.getId()){
            case R.drawable.numberone:
                portrait.setImageResource(R.drawable.numbertwo);
                break;

            case R.drawable.numbertwo:
                portrait.setImageResource(R.drawable.numberthree);
                break;

        }

}

}

我的number.xml在这里

<ImageView
    android:id="@+id/numberImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/numberone" 
    android:onClick="numberClick" />

我认为非常简单的代码,但自从昨晚以来,空指针异常令我感到沮丧。任何帮助表示赞赏。

5 个答案:

答案 0 :(得分:1)

正如其他人所指出的那样,在onCreate方法中获得ImageView

 您获得空指针异常的原因是您不能initialize java中任何函数之外的对象。必须在函数中进行初始化,在本例中为onCreate()。 在functionconstructors之外声明的任何非静态内容都不会被初始化。就在那里。要开始使用它,请在函数中初始化它。

答案 1 :(得分:0)

问题是由这条线引起的。

 ImageView portrait = (ImageView) findViewById(R.id.numberImage);

将'portrait'变量移动到类成员并在setContentView()之后在onCreate()中初始化它,这将解决您的问题。

或更改您的代码

public class numberActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.number);

} 



  public void numberClick(View v) {   
     switch(v.getId()){
        case R.drawable.numberone:
            ((ImageView)v).setImageResource(R.drawable.numbertwo);
            break;

        case R.drawable.numbertwo:
            ((ImageView)v).setImageResource(R.drawable.numberthree);
            break;

    }

  }
 }

答案 2 :(得分:0)

试试这个

 public class numberActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.number);


ImageView portrait = (ImageView) findViewById(R.id.numberImage);
}    

public void numberClick(View v) {   
    switch(v.getId()){
            case R.drawable.numberone:
                portrait.setImageResource(R.drawable.numbertwo);
                break;

            case R.drawable.numbertwo:
                portrait.setImageResource(R.drawable.numberthree);
                break;

        }

}
}

答案 3 :(得分:0)

把这个

 ImageView portrait = (ImageView) findViewById(R.id.numberImage);

在onCreate方法..

答案 4 :(得分:0)

ImageView portrait = (ImageView) findViewById(R.id.numberImage);

这一行必须在onCreate方法中。 喜欢这个

  public class numberActivity extends Activity {

    ImageView portrait;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.number);
//This element will be found once your contentview is set
        portrait = (ImageView) findViewById(R.id.numberImage);

    }    


    public void numberClick(View v) {   
        switch(v.getId()){
                case R.drawable.numberone:
                    portrait.setImageResource(R.drawable.numbertwo);
                    break;

                case R.drawable.numbertwo:
                    portrait.setImageResource(R.drawable.numberthree);
                    break;

            }

    }