【问题标题】:Cannot display the value of the button clicked to edittext无法显示单击以编辑文本的按钮的值
【发布时间】:2012-09-12 12:26:44
【问题描述】:

我正在创建一种应用程序,其中有许多按钮,每个按钮都有不同的数字 (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

【问题讨论】:

  • 你在点击按钮时调用 one() 吗?

标签: android android-edittext calculator


【解决方案1】:

正因为如此——

....
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 globaly 并在 onCreate 中使用新声明进行了初始化。方法one 方法仅考虑来自全局对象的EditText 对象。所以,it(et) 为空。因此,最好删除 onCreate 中的声明并执行如下代码 -

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

et = (EditText) findViewById(R.id.editText1);
final TextView timer = (TextView) findViewById(R.id.textViewtimer);
....

【讨论】:

  • 感谢 SpK!我忽略了那个......愚蠢的我...... :)我会接受你的回答。
  • @omi0301 试试看,然后告诉我。如果您有任何例外情况。
  • @omi0301 尝试使用et.append(...) 而不是et.setText(...)
【解决方案2】:

您得到 NullPointerException 因为您的 EditText 是在“one”方法的范围之外定义的。

为避免此异常,请在类范围内定义(EditText et)并在 onCreate 方法中删除定义。

【讨论】:

    【解决方案3】:

    删除onCreate()方法中EditText et声明
    声明EditText中的初始化由于这个原因,onCreate 方法已成为本地

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      相关资源
      最近更新 更多