0

以下の例では、EditText e1 の値を null として取得しています。したがって、null ポインター例外がスローされます。以下の MainActivity に書き、ボタンをクリックすると関数 calculateSquare を呼び出します。何か不足していますか?

public void calculateSquare(View view) {
    setContentView( R.layout.activity_main);
    EditText e1=(EditText) findViewById(R.id.editText1);
    int number = Integer.parseInt(e1.getText().toString());
    int square=number * number;
    TextView e2=(TextView) findViewById(R.id.textView2);
    e2.setText(square);
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="25dp"
    android:text="@string/hello_world"
    tools:context=".MainActivity" />
<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="32dp"
    android:layout_marginTop="52dp"
    android:layout_toLeftOf="@+id/textView1"
    android:ems="10"
    android:inputType="number" />
<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="29dp"
    android:text="CalculateSquare" 
    android:onClick="calculateSquare"/>
<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/editText1"
    android:layout_marginRight="36dp"
    android:text="Square"
    android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
4

1 に答える 1

5

setText() へのパラメータとして文字列を渡す必要があります。コードを次のように変更します。

e2.setText(square+"");

呼び出すとsetText(int)、システムは指定された id(int) で文字列リソースを探します。これは、R クラスから提供される必要があります。

e2.setText(R.string.mystring);

null ポインターについては、プロジェクトをクリーンアップしてみてください。開始を onCreate() メソッドに移動する必要があります。

@Override
public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView( R.layout.activity_main);
  EditText e1=(EditText) findViewById(R.id.editText1);
  TextView e2=(TextView) findViewById(R.id.textView2);
}

public void calculateSquare(View view) {
  int number;
  if (e1.getText().toString().length()>0){
     number = Integer.parseInt(e1.getText().toString());
     int square=number * number;
     e2.setText(square+"");
  }
}

空の文字列は int に変換できないため、編集テキストに何かを入力したかどうかを常に確認する必要があります。

于 2012-11-02T15:00:12.360 に答える