1

画面上でボタンを押した後に「こんにちは」というフレーズをテキストビューに表示することを目的とした非常に基本的なプログラムを書いていますが、実行するたびにアプリケーションが予期せず停止した理由がわかりません。

これは私が書いたプログラムです:

public class EtudeActivityActivity extends Activity{
  TextView tvResponse;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final TextView tvResponse = (TextView)  findViewById (R.id.tvResponse);
  }


  public void updateTV(View v) {
    tvResponse.setText("Hello");
  }
}

また、android:onClick = "updateTV"ボタンのmain.xmlファイルにを挿入しました。

助けてくれてありがとう!

4

2 に答える 2

3

tvResponseこれは、メンバー変数を設定していないためです。代わりに、同じ名前で新しいローカル変数を設定します。したがって、を呼び出すとsetText()、無効な参照にアクセスしています

変更する必要があります

final TextView tvResponse = (TextView)  findViewById (R.id.tvResponse);

tvResponse = (TextView)  findViewById (R.id.tvResponse);

メンバー変数を設定して、後で(updateTV()が呼び出されたときに)有効な参照を持つようにします。

于 2012-06-08T22:29:23.000 に答える
1

あなたが私たちに見せていないというインスタンス変数tvResponseを持っているのではないかと思います-それがupdateTVメソッドが参照するものです。これは、内部で宣言したローカル tvResponse変数とはまったく別のものonCreateです。の最後の行をonCreateローカル変数宣言から変数への単純な代入に変更するとtvResponse、機能する可能性があると思います。それ以外の場合、インスタンスtvResponse変数に値を割り当てていない場合は、デフォルト値がnullになり、NullPointerExceptioninが発生しupdateTVます。

于 2012-06-08T22:27:30.173 に答える