2015-04-30 4 views
0

Как предотвратить повреждение моего приложения, когда поле EditText пуст?Пустой файл 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, который мог бы помочь ответить на этот вопрос, пожалуйста, дайте мне знать, где его найти.

Спасибо!

EDIT

Я попытался добавить рекомендованную 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!"); 

        } 

      } 

      } 

     }); 
    } 

} 

ответ

0

В методе OnClick из onClickListener добавить чек

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

Вы также делаете ИНТ разбора, так что вы также можете проверить, если TextUtils.isDigitsOnly (Doc)

+0

Я добавил это и по какой-то причине приложение по-прежнему падает. Любые идеи почему? – Joseph

+0

, пожалуйста, напишите журналы об авариях. Вы также добавили проверку isDigits? – Manish

+0

Это звучит действительно глупо, но ... Где я могу найти журналы аварий? – Joseph

0

getText().getString() гарантированно никогда return 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/синтаксического анализа: here

Смежные вопросы