0

私の 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" />

非常に単純なコードだと思いますが、昨夜からヌルポインタ例外にイライラしています。どんな助けでも大歓迎です。

4

5 に答える 5

1

他の人が指摘しているようImageViewに、onCreateメソッドでを取得します。nullポインタ例外が発生する理由は、Javaの関数の外部にオブジェクト

を配置できないためです。initialize初期化は関数で行う必要があります。この場合はで行いonCreate()ます。functionまたはの外部で非静的に宣言されたものはすべて初期化されconstructorsません。そこにあります。使用を開始するには、関数で初期化します。

于 2012-10-09T07:31:03.857 に答える
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;

    }

  }
 }
于 2012-10-09T07:21:36.110 に答える
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;

        }

}
}
于 2012-10-09T07:21:58.277 に答える
0

これを置く

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

onCreateメソッドで..

于 2012-10-09T07:22:18.000 に答える
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;

            }

    }
于 2012-10-09T07:23:32.037 に答える