2016-05-01 4 views
-2

Im разрабатывает приложение для калорий. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что пользователь решил нажать save, не вводя ничего, что приложение должно уведомить пользователя о том, что они должны что-то ввести, чтобы сохранить калорию. Приложение работает, когда пользователь вводит правильные значения текста редактирования.Приложение вылетает, когда ничего не вводится при нажатии кнопки «Сохранить». Ошибка должна появиться

Проблема: приложение вылетает, когда пользователь нажимает кнопку сохранения, когда они ничего не вставляют.

logcat.

              05-01 12:46:50.294 1810-1810/com.example.treycoco.calorietracker E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.example.treycoco.calorietracker, PID: 1810 
                       java.lang.NumberFormatException: Invalid int: "" 
                        at java.lang.Integer.invalidInt(Integer.java:137) 
                        at java.lang.Integer.parseInt(Integer.java:358) 
                        at java.lang.Integer.parseInt(Integer.java:331) 
                        at com.example.treycoco.calorietracker.AddEntry.saveDataToDB(AddEntry.java:100) 
                        at com.example.treycoco.calorietracker.AddEntry$1.onClick(AddEntry.java:79) 
                        at android.view.View.performClick(View.java:4438) 
                        at android.view.View$PerformClick.run(View.java:18422) 
                        at android.os.Handler.handleCallback(Handler.java:733) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:136) 
                        at android.app.ActivityThread.main(ActivityThread.java:5045) 
                        at java.lang.reflect.Method.invokeNative(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:515) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                        at dalvik.system.NativeStart.main(Native Method) 

AddEntry.java

    public class AddEntry extends Fragment implements 
        View.OnClickListener { 

        EditText DescriptionET,CalorieET; 
        ImageButton Savebtn, Cancelbtn; 

        String description , calorieAmt; 

        //database 
        private DatabaseHandler dba; 



        public AddEntry() { 
        // Required empty public constructor 
        } 


        @Override 
        public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, 
         Bundle savedInstanceState) { 

        // Inflate the layout for this fragment 
        View myView = 
        inflater.inflate(R.layout.fragment_add_entry, 
       container, false); 
       Savebtn = (ImageButton) myView.findViewById(R.id.SaveBtn); 
       Savebtn.setBackgroundColor(Color.TRANSPARENT); 
       Savebtn.setOnClickListener(this); 


      Cancelbtn = (ImageButton) myView.findViewById(R.id.CancelBtn); 
      Cancelbtn.setBackgroundColor(Color.TRANSPARENT); 
       Cancelbtn.setOnClickListener(this); 
       return myView; 
        } 


         @Override 
      public void onViewCreated(View view, Bundle savedInstanceState) 
      { 
      super.onViewCreated(view, savedInstanceState); 

      DescriptionET= (EditText)view.findViewById(R.id.foodEditText); 

      DescriptionET.setInputType(InputType.TYPE_CLASS_TEXT); 

      CalorieET=(EditText)view.findViewById(R.id.caloriesEditText); 
      CalorieET.setInputType(InputType.TYPE_CLASS_NUMBER); 


      //save to database: 
      dba = new DatabaseHandler(getContext()); 


      Savebtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 

       saveDataToDB(); 


      } 
     }); 


     } 





      public void saveDataToDB(){ 

      Food food = new Food(); 
      String name = DescriptionET.getText().toString().trim(); 
      String calString = CalorieET.getText().toString().trim(); 

      //convert the claories numbers to text 

      int cal = Integer.parseInt(calString); 


      if (DescriptionET.getText().toString().equals("") || 
      CalorieET.getText().toString().equals("0")){ 

      Toast.makeText(getActivity(), "Please enter information", 
       Toast.LENGTH_LONG).show(); 
      }else{ 

     food.setFoodName(name); 
     food.setCalories(cal); 

     //call addFood method from the DatabaseHandler 
     dba.addFood(food); 
     dba.close(); 


     //clear the editTexts 
     DescriptionET.setText(""); 
     CalorieET.setText(""); 

     //take the user to the next screen 
     // 


     ((appMain) getActivity()).loadSelection(0);; 
    } 

} 


      @Override 
      public void onClick(View v) { 
      switch (v.getId()) { 


       case R.id.SaveBtn: 


      description = DescriptionET.getText().toString(); 
      calorieAmt=CalorieET.getText().toString(); 

      if (DescriptionET.getText().toString().equals("") || 
      CalorieET.getText().toString().equals("0")){ 

      Toast.makeText(getActivity(), "Please enter information", 
      Toast.LENGTH_LONG).show(); 
      } 



      break; 


        case R.id.CancelBtn: 

        EditText descriptionET= 
       (EditText)getView().findViewById(R.id.foodEditText); 
       descriptionET.setText(""); 


      EditText calorieET= 
      (EditText)getView().findViewById(R.id.caloriesEditText); 
      calorieET.setText(""); 

      break; 
    } 
} 

}

ответ

1

изменение вашей линии

if (DescriptionET.getText().toString().equals("") || 
     cal==0){ 

     Toast.makeText(getActivity(), "Please enter information", 
      Toast.LENGTH_LONG).show(); 
     } 
3

Просто добавьте проверку NULL для значения калорий.

if(CalorieET.getText().toString().equals("") 
{ 
Toast.makeText(this,"Please Enter a Value", 3000)show(); 
} 
else 
{ 
//code here to add it to db 
} 
1
if (TextUtils.isEmpty(DescriptionET.getText().toString()) || TextUtils.isEmpty(CalorieET.getText().toString()) 
{ 
Toast.makeText(getActivity(), "Please enter information", 
     Toast.LENGTH_LONG).show(); 
} 
1

На самом деле вы установили onClickListener от вашего Savebtn на что-то другое, чем функции вы пытаетесь проверить здравомыслие вход, так что вы должны двигаться проверки ваше состояние перед вызовом saveDataToDB.

Изменить эту часть кода:

Savebtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      if (DescriptionET.getText().toString().equals("") || 
       CalorieET.getText().toString().equals("0") || 
       CalorieET.getText().toString().equals("")){ 

       Toast.makeText(getActivity(), "Please enter information", 
       Toast.LENGTH_LONG).show(); 
      } 
      else { 
       saveDataToDB(); 
      } 


     } 
    }); 
1
  if (!calString.equals("")) { 

     int cal = Integer.parseInt(calString); 


      //code for database 
     ; 
+0

Это помогло мне решить эту проблему – user6079154

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