Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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);
    }
}
like image 242
user2179989 Avatar asked Apr 05 '13 12:04

user2179989


People also ask

How to validate if a string contains a date in Java?

Learn to validate if a given string contains a date value or not. We will learn various date validation techniques available in Java 7, Java 8 and above. 1. LocalDate and DateTimeFormatter (Java 8 and Later) 1.1. LocalDate.parse () for ‘yyyy-MM-dd’ Pattern 1.2. DateTimeFormatter for Custom Patterns 2. SimpleDateFormat (Java 7) 3.

How to format the date and time in Android?

Steps to Format the Date and Time in Android 1 Create an empty activity project Using Android Studio create an empty activity project. Refer to Android | How to Create/Start a New Project in Android Studio? 2 Working with the activity_main.xml file The main layout of the activity file containing 8 TextViews. ... 3 Working with the MainActivity file

Should I use simpledateformat for date validation in Java?

In case you are still stuck at Java 7 and can’t upgrade due to some legacy application’s dependencies, you can use SimpleDateFormat for date validation. Though SimpleDateFormat is not thread-safe or immutable, still, it serves the purpose pretty well. Do not use this class in a multi-threaded environment with added synchronization.

How to check if a date is in a valid format?

The given below is a Java program to check if a given date is in a valid format of “ MM-dd-yyyy “. 2. SimpleDateFormat (Java 7) In case you are still stuck at Java 7 and can’t upgrade due to some legacy application’s dependencies, you can use SimpleDateFormat for date validation.


2 Answers

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

like image 142
Nezam Avatar answered Sep 29 '22 07:09

Nezam


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. :)

like image 24
user2179989 Avatar answered Sep 29 '22 07:09

user2179989