0

それぞれ異なる数字(0〜9)のボタンがたくさんあるアプリのようなものを作成しています。ボタンをクリックすると、その番号を edittext フィールドに表示したいと思います。一種の電卓です。以下は私のコードです:

public class GameActivity extends Activity {

TextView timer;
Button button1;
EditText et;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gameactivity);
    Intent mIntent = getIntent();
    int seconds = getIntent().getIntExtra("seconds", 0);

    EditText et = (EditText) findViewById(R.id.editText1);
    final TextView timer = (TextView) findViewById(R.id.textViewtimer);
    new CountDownTimer(seconds, 1000) {

         public void onTick(long millisUntilFinished) {
             timer.setText("Seconds remaining: " + millisUntilFinished / 1000);
         }

         public void onFinish() {
             Intent intent = new Intent(GameActivity.this, Main.class);
             startActivity(intent);
         }
      }.start();
}

public void one (View v){
int n = 1;
et.setText(n);
}

これが私が得ているエラーです:

09-12 12:21:25.778: E/AndroidRuntime(3658): FATAL EXCEPTION: main
09-12 12:21:25.778: E/AndroidRuntime(3658): java.lang.IllegalStateException: Could not execute method of the activity
09-12 12:21:25.778: E/AndroidRuntime(3658):     at  android.view.View$1.onClick(View.java:2144)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at android.view.View.performClick(View.java:2485)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at android.view.View$PerformClick.run(View.java:9080)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at android.os.Handler.handleCallback(Handler.java:587)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at android.os.Looper.loop(Looper.java:123)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at android.app.ActivityThread.main(ActivityThread.java:3683)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at java.lang.reflect.Method.invokeNative(Native Method)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at   java.lang.reflect.Method.invoke(Method.java:507)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at dalvik.system.NativeStart.main(Native Method)
09-12 12:21:25.778: E/AndroidRuntime(3658): Caused by: java.lang.reflect.InvocationTargetException
09-12 12:21:25.778: E/AndroidRuntime(3658):     at java.lang.reflect.Method.invokeNative(Native Method)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at  java.lang.reflect.Method.invoke(Method.java:507)
09-12 12:21:25.778: E/AndroidRuntime(3658):     at  android.view.View$1.onClick(View.java:2139)
09-12 12:21:25.778: E/AndroidRuntime(3658):     ... 11 more
09-12 12:21:25.778: E/AndroidRuntime(3658): Caused by: java.lang.NullPointerException
09-12 12:21:25.778: E/AndroidRuntime(3658):     at com.dtan.mathwiz.GameActivity.one(GameActivity.java:42)
09-12 12:21:25.778: E/AndroidRuntime(3658):     ... 14 more
4

3 に答える 3

0

このため -

....
int seconds = getIntent().getIntExtra("seconds", 0);

EditText et = (EditText) findViewById(R.id.editText1);           // Already declared in global
final TextView timer = (TextView) findViewById(R.id.textViewtimer);
....

グローバルを宣言し、新しい宣言EditTextで初期化しました。onCreateメソッドmethod は、グローバル オブジェクトのみからの のオブジェクトをone考慮します。EditTextだから、それ(et)はヌルです。したがって、内部の宣言を削除して、onCreate以下のようなコードを実行することをお勧めします -

....
int seconds = getIntent().getIntExtra("seconds", 0);

et = (EditText) findViewById(R.id.editText1);
final TextView timer = (TextView) findViewById(R.id.textViewtimer);
....
于 2012-09-12T04:22:39.037 に答える
0

EditText が「one」メソッドの範囲外で定義されているため、NullPointerException が発生しました。

この例外を回避するには、クラスのスコープで (EditText et) を定義し、onCreate メソッドで定義を削除します。

于 2012-09-12T04:26:17.007 に答える
0

メソッド内の宣言を削除します。これにより、メソッド内の宣言初期化ローカルになりました。EditText etonCreate()
EditTextonCreate

于 2012-09-12T04:26:44.010 に答える