繁体   English   中英

Android:Nullpointer问题

[英]Android : Nullpointer issue

我的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" />

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

就像其他人指出的那样,在onCreate方法中获取ImageView

出现空指针异常的原因是,无法在Java中的任何函数之外initialize对象。 初始化必须在函数中进行,在这种情况下,应在onCreate() functionconstructors function外部声明的任何非静态内容都不会初始化。 就在那里。 要开始使用它,请在函数中对其进行初始化。

问题是由这条线引起的。

 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;

    }

  }
 }

尝试这个

 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;

        }

}
}

把这个

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

在onCreate方法中。

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;

            }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM