java - EditText 问题中的整数

标签 java android

我想将 2 个数字相加并在屏幕上显示结果。 这就是为什么我有 2 个 EditText (Number1 & Number2) 、一个 Button (PLUS) 和一个显示结果的 TextView 。

问题是整数和 EditText 可能出现问题。
Logcat 说:“由 java.lang.NumberFormatException 引起:无效的 int:”

这是代码:

public class MainActivity extends Activity {

EditText FirstNum;
EditText SecondNum;
Button PlusButton;
TextView Result;
int Number1;
int Number2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FirstNum = (EditText) findViewById(R.id.FirstNum);
    SecondNum = (EditText) findViewById(R.id.SecondNum);


        Number1 = Integer.parseInt(FirstNum.getText().toString());
        Number2 = Integer.parseInt(SecondNum.getText().toString());



    PlusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Result.setText(plusmethod(Number1,Number2)+"");
        }
    });

}


int plusmethod(int a, int b) {
    return a + b;
}

更新:这是我的完整 Logcat:

 Process: com.gss.dejix.calq, PID: 20008
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gss.dejix.calq/com.gss.dejix.calq.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2412)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
            at android.app.ActivityThread.access$900(ActivityThread.java:174)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5593)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.gss.dejix.calq.MainActivity.onCreate(MainActivity.java:36)
            at android.app.Activity.performCreate(Activity.java:5458)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
            at android.app.ActivityThread.access$900(ActivityThread.java:174)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5593)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)

最佳答案

在解析为 int 之前检查 editext 值,否则会给出 NumberFormatException :

if(FirstNum.getText().toString().trim().length()>0){
     Number1 = Integer.parseInt(FirstNum.getText().toString());
}
if(SecondNum.getText().toString().trim().length()>0){
     Number2 = Integer.parseInt(SecondNum.getText().toString());
}

您还缺少初始化 Result 和 PlusButton 在使用之前首先对其进行初始化。

示例:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirstNum = (EditText) findViewById(R.id.FirstNum);
        SecondNum = (EditText) findViewById(R.id.SecondNum);
        Result = (TextView) findViewById(R.id.Result);
        PlusButton = (Button) findViewById(R.id.PlusButton);

        PlusButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isValid=true;
                if(FirstNum.getText().toString().trim().length()<=0){
                    FirstNum.setError("Value Required");
                    isValid=false;
                }
                if(SecondNum.getText().toString().trim().length()<=0){
                    SecondNum.setError("Value Required");
                    isValid=false;
                }
                if(isValid){
                    Result.setText(String.valueOf(plusmethod(Integer.parseInt(FirstNum.getText().toString()),Integer.parseInt(SecondNum.getText().toString()))));
                }

            }
        });
    }

关于java - EditText 问题中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038197/

相关文章:

java - 如何不覆盖 firebase 数据库中的用户输入?

android - 在 RecyclerView 中平均分配项目

java - 在 Activity 小部件中显示 java 类的字符串

java - MQ 消息消费者数组实现

javascript - 响应 header 为空

java - HTTP 状态 500 - 无法为 JSP : in Eclipse Luna 编译类

android - 对齐 Android GridLayout

android - React Native 'yarn android' 失败,出现 'Task :app:compileDebugJavaWithJavac FAILED' 和 'package org.unimodules.core.interfaces does not exist'

java - 如何将这个列表翻译成Java?

java - 使用 System.out.println() 迭代 XML 输入流