【问题标题】:Empty EditText causes program to crash空的 EditText 导致程序崩溃
【发布时间】:2015-05-02 22:17:36
【问题描述】:

当我的EditText 字段为空时,如何防止我的应用崩溃?

    public class Credits extends Activity {
    int inaugural = 1992;
    int differenceInYears;
    int userGuess;
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int output;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_credits);
        final EditText Guess=(EditText)findViewById(R.id.txtYearGuess);
        Button go = (Button)findViewById(R.id.btnCalculate);
        final TextView result = ((TextView)findViewById(R.id.txtResult));

        go.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int userGuess= Integer.parseInt(Guess.getText().toString());
                differenceInYears = year - inaugural;
                output = userGuess - differenceInYears;

                if (output < -1) {
                    result.setText("Guess again! You guessed too low!");

                    }

                else if (output == 1) {
                    result.setText("You're REALLY close! You guessed too high!");


                    }

                else if (output == -1) {
                    result.setText("You're REALLY close! You guessed too low!");


                    }

                else if (output > 1) {
                    result.setText("Guess again! You guessed too high!");


                    }

                else {
                    result.setText("Good job! You're an FRC Genious!");

                    }



            }

        });
    }

}

是否就像让另一个 if 语句监视“空”变量一样简单?如果是这样,该代码会是什么样子?我对防止这种崩溃发生的想法有点不知所措。如果 Eclipse 有任何类型的报告可以帮助回答这个问题,请告诉我在哪里可以找到它。

谢谢!

编辑

我尝试添加推荐的TextUtils,但没有解决应用崩溃问题。

public class Credits extends Activity {
    int inaugural = 1992;
    int differenceInYears;
    int userGuess;
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int output;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_credits);
        final EditText Guess=(EditText)findViewById(R.id.txtYearGuess);
        Button go = (Button)findViewById(R.id.btnCalculate);
        final TextView result = ((TextView)findViewById(R.id.txtResult));

        go.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int userGuess= Integer.parseInt(Guess.getText().toString());
                differenceInYears = year - inaugural;
                output = userGuess - differenceInYears;

                if(!TextUtils.isEmpty(Guess.getText().toString())) {
                    Toast.makeText(Credits.this, "Please input your Guess", Toast.LENGTH_LONG).show();
                    }

                else {

                if (output < -1) {
                    result.setText("Guess again! You guessed too low!");

                    }

                else if (output == 1) {
                    result.setText("You're REALLY close! You guessed too high!");


                    }

                else if (output == -1) {
                    result.setText("You're REALLY close! You guessed too low!");


                    }

                else if (output > 1) {
                    result.setText("Guess again! You guessed too high!");


                    }

                else {
                    result.setText("Good job! You're an FRC Genious!");

                    }

            }

            }

        });
    }

}

【问题讨论】:

    标签: android crash android-edittext


    【解决方案1】:

    getText().getString() 保证不会返回 null,只要您的 edittext 正确初始化(即它指向实际视图),所以最坏的情况是您会得到一个空字符串 --> ""。要检查这一点,请按照以下方式进行操作

    if (!Guess.getText().getString().equals(""))如果获取到的值不等于“”,那就做事。

    您可能还希望将解析语句包装在 try-catch 块中,以防止出现人们输入字母或其他内容的情况。

    public static Integer tryParse(String text) {
       try {
         return new Integer(text);
       } catch (NumberFormatException e) {
         return null;
       }
    }
    

    try/parse 的来源:here

    【讨论】:

      【解决方案2】:

      在 onClickListener 的 onClick 方法中添加检查

          String text = Guess.getText().toString();
          if(text != null && !text.trim().equals("")){
             try{
                  //Do watever you want to do here
             }catch(NumberFormatException e){
                  e.printStackTrace();
             }
          }
      

      您也在进行 int 解析,因此您还可以检查 TextUtils.isDigitsOnly (Doc)

      【讨论】:

      • 我添加了这个,但由于某种原因,应用程序仍然崩溃。任何想法为什么?
      • 请发布崩溃日志。您是否还添加了 isDigits 检查?
      • 这听起来很愚蠢,但是......我在哪里可以找到崩溃日志?
      • 在 studio 中检查 logcat 或 eclipse 无论您使用什么,否则启动 android 监视器。
      猜你喜欢
      • 2015-06-28
      • 2018-04-15
      • 2012-01-07
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多