代码之家  ›  专栏  ›  技术社区  ›  Mike

为什么我的Android应用程序在我尝试检查EditText是否有双精度时强制关闭?

  •  0
  • Mike  · 技术社区  · 15 年前
    Scanner scanner = new Scanner(lapsPerMile_st);  
                    if (!scanner.hasNextDouble()) {  
                        Context context = getApplicationContext();
                        String msg = "Please Enter Digits and Decmials Only";
                        int duration = Toast.LENGTH_LONG;
                        Toast.makeText(context, msg, duration).show();
    
                        lapsPerMileEditText.setText("");
                        return;
                    } else {
                         //Edit box has only digits, Set data and display stats
                        data.setLapsPerMile(Integer.parseInt(lapsPerMile_st));
    
                        lapsRunLabel.setVisibility(0);
                        lapsRunTextView.setText(Integer.toString(data.getLapsRun()));
    
                        milesRunLabel.setVisibility(0);
                        milesRunTextView.setText(Double.toString(data.getLapsRun()/data.getLapsPerMile()));
                    }
    
    
    <EditText
    android:id="@+id/mileCount"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="110dp"
    android:inputType="numberDecimal"
    android:maxLength="4"
    />
    

    出于某种原因,如果我输入一个非十进制数字(如3或5),它会正常工作,但当我输入一个浮点(如3.4或5.8)时,它会强制关闭。我好像不知道发生了什么事。有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Moss    15 年前

    使用正确的类型:integer.parseint,float.parsefloat,…考虑到你使用Java,所以如果一个解析失败的话,你会得到一个例外:NoMultFrimeExtExchange。

    String int_string = "1";
    int data = 0; // 0 as default value
    try
    { 
        data = Integer.parseInt (int_string); 
    } 
    catch (NumberFormatException e)
    { 
        // You are trying to parse and int from a string that is not an int!
    }
    
        2
  •  2
  •   Vadim Kotov First Zero    7 年前

    罪魁祸首几乎可以肯定 parseInt . 继续使用adb连接到您的设备( adb logcat -v time )查看日志以及应用程序崩溃时生成的堆栈跟踪。

    ParseInt不喜欢任何非整数字符(即,当它到达小数点时会爆炸)。

    我建议使用try catch包围parseint或解析“anything”方法。

    接下来,您可能希望将允许的字符限制为仅在布局XML中使用整数类型: https://developer.android.com/reference/android/widget/TextView.html#attr_android:numeric