mardi 23 février 2016

Why event is getting overlapped? Using nested if conditions

I am creating events. I am storing events in database. I want to check if events dose overlap each other.

For this I have created a function in database to check current event with other events.

But now its creating a problem. The event is getting added first. Then if I try to add new event at same time it shows event exists.

But If I update the first event and then try to add new event at same time then it gets added though it should show event exists and should not be added.

I am unable to get the problem. Is anything wrong in my if statements logic? Can anyone help with this please?

save code:

save.setOnClickListener(new View.OnClickListener() {
            String log;
            @Override
            public void onClick(View v) {
                eventTitle = title.getText().toString();
                location = mAutocompleteView.getText().toString();


                List<EventData> events = db.getAllEvents();
                for (EventData cn : events) {
                    log = "Id: " + cn.getId() + " ,Title: " + cn.getTitle() +
                            "Date: " + cn.getFromDate() + ",Todate: " + cn.getToDate() + "Location:" + cn.getLocation() + "Day of week"
                            + cn.getDayOfWeek() + "Notifiction time" + cn.getNotificationTime();
                    Log.i("data",log);
                }



                if (eventTitle.length() == 0) {

                    showAlert("Title can not be empty.");

                }
                else if (startTime.equals(endTime)) {
                    showAlert("End Time can not be same as Start Time.");
                }

                if (db.doesEventOverlap(startTime,endTime,dayOfWeek)) {

                    showAlert("Event Exists");

                }
                else
                {

                    if (editMode) {

                       // db.deleteEvent(eventData);

                        eventData.setTitle(title.getText().toString());
                        eventData.setFromDate(startTime);
                        eventData.setToDate(endTime);
                        eventData.setDayOfWeek(selectDay.getText().toString());
                        eventData.setLocation(mAutocompleteView.getText().toString());
                        eventData.setNotificationTime(notificationTime);
                        eventData.setColor(mColor);

                     //   if(db.doesEventOverlap(startTime,endTime,dayOfWeek))
                       // {
                       //     showAlert("Event Exists.");
                       // }

                       // db.addEvent(new EventData(eventTitle, startTime, endTime, dayOfWeek, location, notificationTime, mColor));

                        db.updateEvent(eventData);
                        showAlert("Event Updated.");

                        List<EventData> event = db.getAllEvents();
                        for (EventData cn : event) {
                            log = "Id: " + cn.getId() + " ,Title: " + cn.getTitle() +
                                    "Date: " + cn.getFromDate() + ",Todate: " + cn.getToDate() + "Location:" + cn.getLocation() + "Day of week"
                                    + cn.getDayOfWeek() + "Notifiction time" + cn.getNotificationTime();
                            Log.i("data",log);
                        }

                       // setResult(RESULT_OK, i);
                       // finish();

                    }

                   else if (!editMode){

                        List<EventData> e = db.getAllEvents();
                        for (EventData cn : e) {
                            log = "Id: " + cn.getId() + " ,Title: " + cn.getTitle() +
                                    "Date: " + cn.getFromDate() + ",Todate: " + cn.getToDate() + "Location:" + cn.getLocation() + "Day of week"
                                    + cn.getDayOfWeek() + "Notifiction time" + cn.getNotificationTime();
                            Log.i("data",log);
                        }

                            // Writing Contacts to log
                            db.addEvent(new EventData(eventTitle, startTime, endTime, dayOfWeek, location, notificationTime, mColor));
                            showAlert("Event Added.");

                    }

                }
            }
        });

Dose event overlap function:

 boolean doesEventOverlap(String startTime, String endTime, String day) {
    String selectQuery = "SELECT COUNT(*) FROM " + TABLE + " WHERE " + KEY_DAY_OF_WEEK + " = '" + day + "'" + " AND "

            + "(" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + startTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + endTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " ('" + startTime + "' < " + KEY_FROM_DATE
            + " AND " + KEY_TO_DATE + " < '" + endTime + "')";

    Log.i("query",selectQuery);

    //  + KEY_DAY_OF_WEEK + " = '" + day + "'";;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            EventData event = new EventData();
            return cursor.getInt(0) > 0;
        } while (cursor.moveToNext());
    }
    return false;
}

create table :

      public void createTable(SQLiteDatabase db){
    String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + KEY_TITLE + " TEXT,"
            + KEY_FROM_DATE + " DATE,"
            + KEY_TO_DATE + " DATE,"
            + KEY_DAY_OF_WEEK + " TEXT,"
            + KEY_LOCATION + " TEXT,"
            + KEY_NOTIFICATION_TIME + " DATE,"
            + KEY_COLOR + " TEXT" + ")";

    db.execSQL(CREATE_EVENTS_TABLE);
}

Aucun commentaire:

Enregistrer un commentaire