2013-11-30 5 views
0

Я сделал приложение для моего использования, чтобы вычислить строку значений, отображаемых в другом действии. Мое приложение имеет 3 editTexts и один button. Если мы нажмем кнопку calculate со входом в текстовом редакторе, а вычисленные значения будут отображаться во втором действии. Я сделал это успешно, но моя проблема заключается в том, что если пользователь оставляет все ящики пустыми и нажимает кнопку, система принудительно закрывает. Чтобы этого избежать, я сделал editText в графическом макете, предварительно введенном с подсказкой. Но если пользователь случайно нажимает кнопку после редактирования editText, система снова показывает Force Close. Я пробовал много методов if else, но он не работает. Некоторые показывают мне правильный способ проверить все поля editText.dont перейти к следующему действию, если все поле заполнено

public class Screen1 extends Activity { 

public static StringBuilder EXTRA_MESSAGE=null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.screen1); 
    Button bu1= (Button)findViewById(R.id.bu); 
    bu1.setOnClickListener(new View.OnClickListener() 
    { 
        @Override 
     public void onClick(View message) 
     { int f1,f3,f4; 
      String vis; 
      EditText t1=(EditText)findViewById(R.id.a); 
      EditText t3=(EditText)findViewById(R.id.c); 
      EditText t4=(EditText)findViewById(R.id.d); 
      String e1=t1.getText().toString(); 
      String e3= t3.getText().toString(); 
      String e4= t4.getText().toString(); 
f1 =Integer.parseInt(e1); 
f4=Integer.parseInt(e4); 
f3=Integer.parseInt(e3); 
    StringBuilder sb = new StringBuilder(); 
    for(float i= (float)0.1;i<=5;i=i+(float) .1) 
    { 

    sb.append(String.format("%.1f", i)+" mcg = "+(f1*60*i*f4)/(f3*1000)+"\n"); 
    } 
vis=sb.toString(); 
    Intent intent = new Intent(message.getContext(),Screen2.class); 

    intent.putExtra("EXTRA_MESSAGE",vis); 
startActivity(intent); 
     }  

});  
} 
} 
+0

0 Пожалуйста, отметьте это принятым. Помогите всем нашим участникам. :) –

ответ

0

Из того, что я понял из вашего вопроса, вы получаете сообщение об ошибке при щелчке bu1, и по крайней мере один из EditTexts является пустой. Это связано с тем, что вы вызываете Integer.parseInt() на пустую строку. Следующий код проверяет, пусты ли ящики, и покажите Toast, если таковые имеются. Он также покажет Toast, если пользователь вводит что-либо, что не является действительным номером:

public class Screen1 extends Activity 
{ 
    private static final String EXTRA_MESSAGE = "extra_msg"; 

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

     final EditText t1 = (EditText)findViewById(R.id.a); 
     final EditText t3 = (EditText)findViewById(R.id.c); 
     final EditText t4 = (EditText)findViewById(R.id.d); 

     Button bu1 = (Button)findViewById(R.id.bu); 
     bu1.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View message) 
       { 
        int f1,f3,f4; 
        String e1 = t1.getText().toString(); 
        String e3 = t3.getText().toString(); 
        String e4 = t4.getText().toString(); 

        if (e1.equals("") || e3.equals("") || e4.equals("")) 
        { 
         Toast.makeText(Screen1.this, "Please enter all numbers.", Toast.LENGTH_SHORT).show(); 
         return; 
        } 

        try 
        { 
         f1 = Integer.parseInt(e1); 
         f4 = Integer.parseInt(e4); 
         f3 = Integer.parseInt(e3); 

         StringBuilder sb = new StringBuilder(); 
         for (float i = 0.1f; i <= 5; i = i + .1f) 
         { 
          sb.append(String.format("%.1f", i) + " mcg = " + (f1 * 60 * i * f4)/(f3 * 1000) + "\n"); 
         } 

         Intent intent = new Intent(Screen1.this, Screen2.class); 
         intent.putExtra(EXTRA_MESSAGE, sb.toString()); 
         startActivity(intent); 
        } 
        catch (NumberFormatException e) 
        { 
         Toast.makeText(Screen1.this, "Invalid numbers.", Toast.LENGTH_SHORT).show();        
        } 
       }  
      } 
     );  
    } 
} 
+0

спасибо большое, я пытался получить решение для моей проблемы за последние несколько месяцев, этот ответ мне поможет, большое спасибо –

2

Использование [TextUtils][1] проверки isEmpty() текст внутри onClick:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    EditText t1=(EditText)findViewById(R.id.a); 
    EditText t3=(EditText)findViewById(R.id.c); 
    EditText t4=(EditText)findViewById(R.id.d); 

    Button bu1 = (Button) findViewById(R.id.bu); 
    bu1.setOnClickListener(this); 
}  

@Override 
public void onClick(View message){ 
    boolean foundEmpty = false; 

    if(TextUtils.isEmpty(t1.getText())) { 
     foundEmpty = true; 
     t1.setError("Please Enter a value"); 
    } 

    if(TextUtils.isEmpty(t2.getText()){ 
     foundEmpty = true; 
     t2.setError("Please Enter a value"); 
    } 

    if(TextUtils.isEmpty(t3.getText()){ 
     foundEmpty = true; 
     t3.setError("Please enter a value"); 
    } 

    if(!foundEmpty){ 
     /* none of your text fields are empty */ 
     int f1, f3, f4; 

     f1 =Integer.parseInt(e1); 
     f4=Integer.parseInt(e4); 
     f3=Integer.parseInt(e3); 

     final StringBuilder sb = new StringBuilder(); 
     for(float i= (float)0.1;i<=5;i=i+(float) .1) { 
       sb.append(String.format("%.1f", i)+ 
        " mcg = "+ 
        (f1*60*i*f4)/(f3*1000)+"\n"); 
     } 

     final String vis = sb.toString(); 
     Intent intent = new Intent(message.getContext(), Screen2.class); 
     intent.putExtra("EXTRA_MESSAGE", vis); 
     startActivity(intent); 
    }  
} 
+0

Что такое t1, t3, t4? Они не инициализируются вообще. –

+0

@zues. К сожалению. Спасибо –

+0

имя редактирующего текста –

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