【问题标题】:Get integer value from edittext从edittext获取整数值
【发布时间】:2012-10-04 15:38:27
【问题描述】:

当我尝试运行下面的代码时,我的程序停止了。我希望这段代码从edittext 获取值,但它没有像我预期的那样工作。我做错了什么?

public class MainActivity extends Activity {

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

    Button sum = (Button) findViewById(R.id.button1);
    Button cancel = (Button) findViewById(R.id.button2);

    final EditText from = (EditText) findViewById(R.id.editText1);
    final EditText upto = (EditText) findViewById(R.id.editText2);
    final EditText runsum = (EditText) findViewById(R.id.editText3);

    final int f = Integer.parseInt(from.getText().toString());
    final int u = Integer.parseInt(upto.getText().toString());

}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

这是我的 LogCat 抱歉弄乱了:/

08-28 19:34:44.241: E/Trace(3346): error opening trace file: No such file or directory (2)
08-28 19:34:44.780: D/AndroidRuntime(3346): Shutting down VM
08-28 19:34:44.780: W/dalvikvm(3346): threadid=1: thread exiting with uncaught exception(group=0x40a13300)
08-28 19:34:44.790: E/AndroidRuntime(3346): FATAL EXCEPTION: main
08-28 19:34:44.790: E/AndroidRuntime(3346): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.project/com.example.project.MainActivity}: java.lang.NumberFormatException: Invalid int: ""
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.os.Looper.loop(Looper.java:137)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.ActivityThread.main(ActivityThread.java:4745)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at java.lang.reflect.Method.invokeNative(Native Method)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at java.lang.reflect.Method.invoke(Method.java:511)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at dalvik.system.NativeStart.main(Native Method)
08-28 19:34:44.790: E/AndroidRuntime(3346): Caused by: java.lang.NumberFormatException: Invalid int: ""
08-28 19:34:44.790: E/AndroidRuntime(3346):     at java.lang.Integer.invalidInt(Integer.java:138)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at java.lang.Integer.parseInt(Integer.java:359)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at java.lang.Integer.parseInt(Integer.java:332)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at com.example.project.MainActivity.onCreate(MainActivity.java:25)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.Activity.performCreate(Activity.java:5008)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
08-28 19:34:44.790: E/AndroidRuntime(3346):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
08-28 19:34:44.790: E/AndroidRuntime(3346):     ... 11 more
08-28 19:35:10.560: E/Trace(3394): error opening trace file: No such file or directory (2)
08-28 19:35:11.629: D/gralloc_goldfish(3394): Emulator without GPU emulation detected.
08-28 19:48:19.295: I/Choreographer(3394): Skipped 41 frames!  The application may be doing too much work on its main thread.

【问题讨论】:

  • 是否抛出错误,“我无法成功”是什么意思?如果你有错误,你应该发布你的 logcat
  • 你想从哪里获取editText? R是什么物体?它接缝了很多其他代码,或者至少缺少一些解释。

标签: java android integer android-edittext


【解决方案1】:

-请检查EditText的值,是否有效integer值与否

试试这个代码:

int i = 0;

try{

  i = Integer.parseInt(from.getText().toString());

}catch(NumberFormatException ex){

  System.out.println("Value at TextView is not a valid integer");

}

【讨论】:

  • 如果EditText 没有长度限制或类似的东西,这是正确的方法。其他解决方案通常会引入异常并导致应用崩溃。
【解决方案2】:

正如您从 Logcat 中看到的那样:

08-28 19:34:44.790: E/AndroidRuntime(3346): 由: java.lang.NumberFormatException: Invalid int: ""

有一个空输入,无法转换为int

尝试验证用户输入。

【讨论】:

    【解决方案3】:

    问题似乎是当 Activity 被置于前面时,EditText 中没有任何值。整数解析器不知道如何解析空字符串,所以抛出异常。

    您需要在解析之前检查 EditText 中是否存在文本

    final int f = -1; // or other invalid value
    if (from.getText().toString().length() > 0)
        f = Integer.parseInt(from.getText().toString());
    

    其他EditText也是如此

    【讨论】:

    • 这可能会有所帮助。我现在正在尝试感谢大家的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2021-03-12
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多