我的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" />
我认为非常简单的代码,但自从昨晚以来,空指针异常令我感到沮丧。任何帮助表示赞赏。
答案 0 :(得分:1)
正如其他人所指出的那样,在onCreate方法中获得ImageView
。
您获得空指针异常的原因是您不能initialize
java中任何函数之外的对象。必须在函数中进行初始化,在本例中为onCreate()
。
在function
或constructors
之外声明的任何非静态内容都不会被初始化。就在那里。要开始使用它,请在函数中初始化它。
答案 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;
}
}