2017-11-21 3 views
1

나는 내 애플 리케이션을 연마하고 그것을 깨뜨릴 수 없도록 노력하고 있습니다. 마지막에 Save 버튼이있는 CreateLine 페이지가 있습니다. 테스트를 수행하고 있고 날짜 또는 시간 선택기를 선택하기 전에 저장 버튼을 클릭하여 응용 프로그램을 중단하려고 시도하고 응용 프로그램이 중단됩니다. 기본적으로 내가 원하는 것은 "모든 필드가 입력되었는지 확인"과 같은 경고 대화 상자를 표시한다는 것입니다.날짜 확인 + 시간 선택기

문제는 JODA-TIME을 (를) 사용하고 있는데 어떻게 확인하거나 유효성을 검사 할 수 있는지 잘 모르겠습니까? 나는 내 선택기를 위해이 버튼 저장의 나 코드 아래에 추가 한 :

날짜 + 시간 선택기 :

datePickerButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      DatePickerDialog datePickerDialog = new DatePickerDialog(CreateLine.this, new DatePickerDialog.OnDateSetListener() { 

       @Override 
       public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { 


        monthOfYear = monthOfYear + 1; 
        String Sd = String.valueOf(dayOfMonth + "/" + monthOfYear + "/" + year); 

        datePickerButton.setText(Sd); 

        yearNow = year; 
        monthNow = monthOfYear; 
        dayNow = dayOfMonth; 

       } 


      }, displayCurrentYear, displayCurrentMonth, displayCurrentDay); 


      datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); 
      datePickerDialog.show(); 
     } 


    }); 

    timePickerButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      TimePickerDialog timePickerDialog = new TimePickerDialog(CreateLine.this, new TimePickerDialog.OnTimeSetListener() { 

       @Override 
       public void onTimeSet(TimePicker timePicker, int hour, int minute) { 

        hourNow = hour; 
        minuteNow = minute; 

        String St = String.format("%02d:%02d", hour, minute); 
        timePickerButton.setText(St); 



       } 
      }, displayCurrentHour, displayCurrentMinute, isTwentyFourHrsNow); 

      timePickerDialog.show(); 
     } 
    }); 

SAVE 버튼 :

VerifyButton.setOnClickListener (새 View.OnClickListener() {

 @Override 
     public void onClick(View view) { 

      if (spinner.getSelectedItem().toString().equals("Select Line Type") || spinner2.getSelectedItem().toString().equals("Select Package Type")) { 
        AlertDialog.Builder builder = new AlertDialog.Builder(CreateLine.this); 
        builder.setTitle("Data Input Error"); 
        builder.setMessage("Please Ensure that all fields have been selected before Saving!"); 
        builder.setIcon(R.drawable.warning_icon); 
        builder.setCancelable(true); 

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 
        AlertDialog alert = builder.create(); 
        alert.show(); 
       } else if (monthNow >= 1 && monthNow <= 12) { 

        spinnerSelection = String.valueOf(spinner.getSelectedItem()); 
        spinnerSelection2 = String.valueOf(spinner2.getSelectedItem()); 
        String q = quantity.getText().toString(); 
        String d = duration.getText().toString(); 

        DateTime datetime = new DateTime(yearNow, monthNow, dayNow, hourNow, minuteNow); 
        DateTimeFormatter fmt = DateTimeFormat.forPattern("EE dd MM yyyy" + "\n" + " h:mm a "); 
        String formattedtime = fmt.print(datetime); 
        CalculateButton.setText(formattedtime); 

        // Plus some hours, minutes, and seconds to the original DateTime. 
        DateTimeFormatter fmt2 = DateTimeFormat.forPattern("EE dd MM yyyy" + "\n" + " h:mm a "); 

        DateTime dateTime1 = datetime.plusHours(timeadded); 
        String endtimecalc = fmt2.print(dateTime1); 
        TextView endtime = findViewById(endtimetextView); 
        endtime.setVisibility(View.VISIBLE); 
        endtime.setText(endtimecalc); 

        //INSERT DATA TO DATABASE 
        boolean isInserted = myDb.insertData(
          spinnerSelection, 
          spinnerSelection2, 
          q, 
          d, 
          formattedtime, 
          endtimecalc); 


        if (isInserted == true) { 
         Toast.makeText(CreateLine.this, "Data Inserted Successfully", Toast.LENGTH_LONG).show(); 
         Intent intent = new Intent(CreateLine.this, Dashboard.class); 
         startActivity(intent); 
        } else if (isInserted == false) { 
         AlertDialog.Builder builder = new AlertDialog.Builder(CreateLine.this); 
         builder.setTitle("Save Data Error"); 
         builder.setMessage("Data for this Line already exists.." + "\n" + "Please Clear Line First!"); 
         builder.setIcon(R.drawable.warning_icon); 
         builder.setCancelable(true); 

         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           Intent intent = new Intent(CreateLine.this, Dashboard.class); 
           startActivity(intent); 
          } 
         }); 

         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 
          } 
         }); 
         AlertDialog alert = builder.create(); 
         alert.show(); 
        } else { 
         AlertDialog.Builder builder = new AlertDialog.Builder(CreateLine.this); 
         builder.setTitle("Save Data Error"); 
         builder.setMessage("No Data has been entered!"); 
         builder.setIcon(R.drawable.warning_icon); 
         builder.setCancelable(true); 

         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 
          } 
         }); 

         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 
          } 
         }); 
         AlertDialog alert = builder.create(); 
         alert.show(); 
        } 
       } 
     } 
    }); 
} 

} 여기

내가 재를 오전 로그 캣 오류입니다 ceiving :

org.joda.time.IllegalFieldValueException : monthOfYear 대한 값 0은 범위 내에 있어야 org.joda.time.field.FieldUtils.verifyValueBounds에서 [1,12] (FieldUtils.java:275) org.joda.time.chrono.BasicChronology.getDateTimeMillis0에서 org.joda.time.chrono.BasicChronology.getDateMidnightMillis (BasicChronology.java:631) (BasicChronology.java:186) org.joda.time.chrono에서 에서 . BasicChronology.getDateTimeMillis (BasicChronology.java:182) at org.joda.time.chrono.AssembledChronology.getDateTimeMillis (AssembledChronology.java:133) at org.joda.time.chrono.ZonedChronology.getDateTimeMillis (ZonedChron ology.java:122) at org.joda.time.chrono.AssembledChronology.getDateTimeMillis (AssembledChronology.java:133) at org.joda.time.base.BaseDateTime. (BaseDateTime.java:257) at org.joda .time.base.BaseDateTime. (BaseDateTime.java:198) at org.joda.time.DateTime. (DateTime.java:323) at com.almac.tracker.CreateLine $ 6.onClick (CreateLine.java:313)

LINE 313 :

날짜 시간 날짜 = 새로운 날짜 시간 (yearNow, monthNow, dayNow, hourNow, minuteNow);

아무도 내가 이것을 확인하거나 유효하게 할 수있는 방법을 알고 있습니까 ??

+0

은 제공된 코드에서 CreateLine.java:313입니까? stacktrace의 어느 부분에 저장 버튼이나 날짜 선택기가 onClick으로 언급되어 있습니까? – mavriksc

+0

일반적으로 값 선택에 대한 나쁜 습관 인 정적 문자열 값을 비교하는 대신 setOnItemSelectedListener()를 사용하여 해당 사용자가 선택한 항목의 유효성을 검사 할 수 있습니다 – Gotiasits

+0

상태 멤버 'monthNow'를 방금 초기화 했으므로 값이 0으로 초기화되지 않았습니다. 날짜 선택 도구 (확인 버튼 만 클릭 했습니까?) –

답변

0
VerifyButton.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     if(monthNow>=1 && monthNow <=12){ 
      doWhatYouDoNow; 
     } else { 
      alert(errorMsg); 
     } 
    } 
} 

또는 대신 월을 확인의 모든 PARAMS를 확인하고 사용자에게 표시하는 오류 메시지의지도를 반환하는 방법을 만들 수 있습니다.

+0

감사합니다. @mavriksc! 나는 그것을 시도 할 것입니다 ... – Rajeey3

+0

필자는 나의 유효성 검증을 결합하려고 시도 할 때 또 다른 문제에 부딪혔습니다. 나는 당신이 볼 수있는 경우에 그것을 새롭게했다? 버튼이 방금 부도가 나는 것처럼 보입니다. – Rajeey3

+0

거짓말하지 않으려 고하지 않습니다. 낡은 의미는 무엇입니까? 당신이 그것을 추적 할 때 당신은 그것이 갈 것으로 예상되는 곳으로 가나 요? – mavriksc