Validating "from date" and "to date" in android

13,541

Solution 1

It is better to change such codes:

if((currentDate.after(activeDate)|(currentDate.equals(activeDate)))&&(startDateDisplay.getText().toString()!=null))

to multiple if blocks like:

if((currentDate.after(activeDate)||(currentDate.equals(activeDate))
    if(!startDateDisplay.getText().toString().equals(null))

Note carefully the differences!

Also look at this answer here

Solution 2

Solved..

Thanks @Amit for the answer.My problem is solved and it works like a charm.I have changed only the code in OnDateSetListener segment.Following is the code:

 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {


        activeDate.set(Calendar.YEAR, year);
        activeDate.set(Calendar.MONTH, monthOfYear);
        activeDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);



        Date fromDate,toDate;
        try
            {


                //checks if the date chosen by the user is greater than the current system date.Doesnt allow to choose past date
                if(currentDate.before(activeDate)||currentDate.equals(activeDate))
                {

                    //checks if the from date edit text is empty or not
                    if(startDateDisplay.getText().toString().isEmpty())
                    {

                        updateDisplay(activeDateDisplay, activeDate);

                    }
                    else
                    {


                        //converts the date in the from date edittextbox and active date to dd-mm-yyyy format
                        SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");

                        fromDate=sdf.parse(startDateDisplay.getText().toString());
                        Log.d("fromdate",""+fromDate);

                        String temp=(activeDate.get(Calendar.DAY_OF_MONTH))+"-"+(activeDate.get(Calendar.MONTH)+1)+"-"+(activeDate.get(Calendar.YEAR));
                        toDate=sdf.parse(temp);
                        Log.d("todate",""+toDate);


                        //checks if todate is greater or equal to from date 
                        if ((toDate.after(fromDate))||(toDate.equals(fromDate)))
                        {
                            updateDisplay(activeDateDisplay, activeDate);

                        }
                        else
                        {
                            Toast toast=new Toast(getBaseContext());
                            toast=Toast.makeText(Leave_form.this, "To date should be greater than From date", Toast.LENGTH_SHORT);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                        }
                    }
                }

                else
                {
                    Toast toast=new Toast(getBaseContext());
                    toast=Toast.makeText(Leave_form.this, "Please enter a valid date", Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
                }
            }
        catch(Exception e)
        {
            Log.e("excepion",e.getMessage().toString());
        }
        unregisterDateDisplay();
    }
};

Thanks all of you for the answers. :)

Share:
13,541
user2179989
Author by

user2179989

Updated on June 08, 2022

Comments

  • user2179989
    user2179989 about 2 years

    I an application in which user has to choose two dates namely- from date and to date.Both the fields should not accept any date less than current date.I have gone through some posts in this website and achieved this functionality by using single datepicker dialog and single ondatesetListener.

    my problem is that i am unable to validate the condition that to date should be always greater than or equal to from date.please help me.I am unable to capture the from date as the active date is overide by the active end date Thanks in advance.Following is the code:

    public class Leave_form extends Activity 
    {       
        private static EditText tvDislpayResult;
        private Button startPickDate;
        private Button endPickDate;
        private Calendar startDate;
        private Calendar endDate;
        //private EditText startDateDisplay;
        //private EditText endDateDisplay;
        static final int DATE_DIALOG_ID = 0;
        private TextView startDateDisplay;
        private TextView endDateDisplay;
        private TextView activeDateDisplay;
        private Calendar activeDate;
        private Calendar currentDate;
        private Calendar fromDate;
    
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_leave_form);
    
            /*  capture our View elements for the start date function   */
            startDateDisplay = (EditText) findViewById(R.id.e_from_date);
            startPickDate = (Button) findViewById(R.id.Set_date1);
    
            /*get tday date  */   
    
            currentDate=Calendar.getInstance();
            Log.d("currentDate ",""+(currentDate.get(Calendar.DAY_OF_MONTH))+(currentDate.get(Calendar.MONTH)+1)+(currentDate.get(Calendar.YEAR)));
    
            /* get the current date */
            startDate = Calendar.getInstance();
            Log.d("startdate ",""+(startDate.get(Calendar.DAY_OF_MONTH))+(startDate.get(Calendar.MONTH)+1)+(startDate.get(Calendar.YEAR)));
    
            /* add a click listener to the button   */
            startPickDate.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v) 
                {
                    showDateDialog(startDateDisplay, startDate);
                    Log.d("startDate-on click ",""+(startDate.get(Calendar.DAY_OF_MONTH))+(startDate.get(Calendar.MONTH)+1)+(startDate.get(Calendar.YEAR)));
    
                }
            });
    
            /* capture our View elements for the end date function */
            endDateDisplay = (EditText) findViewById(R.id.e_to_date);
            endPickDate = (Button) findViewById(R.id.Set_date2);
    
            /* get the current date */
            endDate = Calendar.getInstance();
            Log.d("endDate ",""+(endDate.get(Calendar.DAY_OF_MONTH))+(endDate.get(Calendar.MONTH)+1)+(endDate.get(Calendar.YEAR)));
    
            /* add a click listener to the button   */
            endPickDate.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    showDateDialog(endDateDisplay, endDate);
                    Log.d("endDate -on click",""+(endDate.get(Calendar.DAY_OF_MONTH))+(endDate.get(Calendar.MONTH)+1)+(endDate.get(Calendar.YEAR)));
                }
            });
    
            /* display the current date (this method is below)  */
           // updateDisplay(startDateDisplay, startDate);
           // updateDisplay(endDateDisplay, endDate);
        }
    
        private void updateDisplay(TextView dateDisplay, Calendar date) 
        {
            dateDisplay.setText(
                    new StringBuilder()
                        // Month is 0 based so add 1
                        .append(date.get(Calendar.DAY_OF_MONTH) ).append("-")
                        .append(date.get(Calendar.MONTH)+1).append("-")
                        .append(date.get(Calendar.YEAR)).append(" "));
    
            Log.d("msg","date:"+(date.get(Calendar.DAY_OF_MONTH))+(date.get(Calendar.MONTH)+1)+(date.get(Calendar.YEAR)));
    
            fromDate=date;
        }
    
        public void showDateDialog(TextView dateDisplay, Calendar date)
        {
            Log.d("SDD", dateDisplay.getText().toString());
            Log.d("startdate ",""+(currentDate.get(Calendar.DAY_OF_MONTH))+(currentDate.get(Calendar.MONTH)+1)+(currentDate.get(Calendar.YEAR)));
           activeDateDisplay = dateDisplay;
            activeDate = date;
            showDialog(DATE_DIALOG_ID);
        }
    
        private OnDateSetListener dateSetListener = new OnDateSetListener()
        {
            @SuppressWarnings("deprecation")
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                activeDate.set(Calendar.YEAR, year);
                activeDate.set(Calendar.MONTH, monthOfYear);
                activeDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                Log.d("activeDate-on dateset ",""+(activeDate.get(Calendar.DAY_OF_MONTH))+(activeDate.get(Calendar.MONTH)+1)+(activeDate.get(Calendar.YEAR)));
    
                if(currentDate.after(activeDate)|(currentDate.equals(activeDate)))
                {
                    Toast toast=Toast.makeText(Leave_form.this, "Please select a valid date", Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
    
    
                }
                else
                {
                    if((currentDate.after(activeDate)|(currentDate.equals(activeDate)))&&(startDateDisplay.getText().toString()!=null))
                    {
                        Log.d("startDate-on click ",""+(startDate.get(Calendar.DAY_OF_MONTH))+(startDate.get(Calendar.MONTH)+1)+(startDate.get(Calendar.YEAR)));
                        if(startDate.before(activeDate))
                        {
                            updateDisplay(activeDateDisplay, activeDate);
                        }
    
                        else
                        {
                            Toast.makeText(getApplicationContext(), "enter valid date", Toast.LENGTH_SHORT).show();
                            /*AlertDialog alertDialog=new AlertDialog.Builder(Leave_form.this).create();
    
                            alertDialog.setMessage("Choose a valid date");
    
                            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
    
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    // TODO Auto-generated method stub
    
                                }
                            });
                            alertDialog.show();*/
                        }
                    }
                    else
                    {
                        updateDisplay(activeDateDisplay, activeDate);
                    }
    
               }
    
                unregisterDateDisplay();
            }
        };
    
        private void unregisterDateDisplay() 
        {
            Log.d("startdate ",""+(currentDate.get(Calendar.DAY_OF_MONTH))+(currentDate.get(Calendar.MONTH)+1)+(currentDate.get(Calendar.YEAR)));
            Log.d("from date:","-"+activeDate.DAY_OF_MONTH+activeDate.MONTH+activeDate.YEAR);
            activeDateDisplay = null;
            activeDate = null;
        }
    
        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
    
                case DATE_DIALOG_ID:
                    Log.d("fromdate","msg");
                    Log.d("id",""+DATE_DIALOG_ID);
                    return new DatePickerDialog(this, dateSetListener, activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
            }
            return null;
        }
    
        @Override
        protected void onPrepareDialog(int id, Dialog dialog) {
            super.onPrepareDialog(id, dialog);
            switch (id) {
                case DATE_DIALOG_ID:
                    Log.d("id",""+DATE_DIALOG_ID);
                    ((DatePickerDialog) dialog).updateDate(activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
                    break;
            }
        }
    
        public void leave(View view)
        {
            Intent intent1=new Intent(this,Rough.class);
            setContentView(R.layout.activity_rough);
            startActivity(intent1);
        }
        public void logout(View view)
        {
            Intent intent2=new Intent (this,MainActivity.class);
            setContentView(R.layout.activity_main);
            startActivity(intent2);
        }
    }