[英]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()
。 在function
或constructors
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.