我的代码中的错误是什么在sqlite数据库中进行当前日期和存储日期之间的比较?

时间:2014-05-21 17:46:53

标签: android date android-sqlite android-notifications

我有一个Android应用程序,它使用sqlite数据库存储数据,其中一个字段为 match_date

我想要的是三个步骤

  • 首先以正确的方式检索存储的日期。
  • 秒,比较当前日期和存储日期。
  • 第三个在比较2个日期之后创建通知,如果是 答案是真的,必须出现通知才能通知用户。

第三步我将解决现在我的问题是解决前两个步骤

我将不胜感激任何帮助。

的logcat

05-21 17:37:55.917: E/inside the Shownotification(1306): index is4
05-21 17:37:55.917: E/inside the Shownotification(1306): date is2014
05-21 17:37:55.921: E/inside the displayNotification(1306): inside displayNotification
05-21 17:37:55.933: E/inside the Shownotification(1306): index is4
05-21 17:37:55.933: E/inside the Shownotification(1306): date is2014
05-21 17:37:55.933: E/inside the displayNotification(1306): inside displayNotification

firstActivity.java

package com.devleb.expandablelistdemo3;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;



import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.Builder;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class FirstActivity extends Activity {

    TextView txtDate;

    private SQLiteDatabase database;
    private ExternalDbOpenHelper extDB;

    private static final String DB_NAME = "world_cup.db";
    // *****Tables name**************************//
    private static final String TABLE_NAME = "match_list";

    // *****Tbale name******************************

    public static final String PLACE_ID = "_id";
    public static final String STAD_NAME = "stad_name";
    public static final String TEAM1 = "team1";
    public static final String TEAM2 = "team2";

    public static final String MATCH_DATE = "match_date";
    public static final String MATCH_TIME = "match_time";
    public static final String FLAG1 = "flags1";
    public static final String FLAG2 = "flags2";

    public static final String[] ALL_KEYS = new String[] { PLACE_ID, STAD_NAME,
            TEAM1, TEAM2, MATCH_DATE, MATCH_TIME,  FLAG1, FLAG2, };
    // *****Tbale name******************************

    ItemDetails listdetail;

    Cursor c;

    private static final int myNotificationId = 1;


    ///////////////////////
    long diffSeconds;
    long diffMinutes;
    long diffHours;
    long diffDays;
    ///////////////////////

    //for the alarm amanager and the notification
    public static int eventID = 1;

    Date d1 = new Date();

    SimpleDateFormat format;

    //////////////////////////////////////////////

    // private DatabaseHelper dbHelper = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        getDiffDate();

        extDB = new ExternalDbOpenHelper(this, DB_NAME);
        database = extDB.openDataBase();

        showNotification();

        // Log.e("inside the onCreate", "inside onCreate");


    }


    public void listTeams(View v) {
        Intent in = new Intent(getBaseContext(), MainActivity.class);
        startActivity(in);
    }

    public void listGroups(View v) {
        Intent in = new Intent(getBaseContext(), GroupList.class);
        startActivity(in);
    }

    public void DisplaySched(View v) {

        Intent in = new Intent(getBaseContext(), MatchScheduleList.class);
        startActivity(in);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.first, menu);
        return true;
    }


      public void getDiffDate() {

        String dateStop = "06/12/2014 23:00:00";

        // HH converts hour in 24 hours format (0-23), day calculation
        format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

        d1 = new Date();


        Date d2 = null;

        try {

            d2 = format.parse(dateStop);

            // in milliseconds
            long diff = d2.getTime() - d1.getTime();

            long diffSeconds = diff / 1000 % 60;
            long diffMinutes = diff / (60 * 1000) % 60;
            long diffHours = diff / (60 * 60 * 1000) % 24;
            long diffDays = diff / (24 * 60 * 60 * 1000);

            System.out.print(diffDays + " days, ");
            System.out.print(diffHours + " hours, ");
            System.out.print(diffMinutes + " minutes, ");
            System.out.print(diffSeconds + " seconds.");

            txtDate = (TextView) findViewById(R.id.txtDifDate);
            String resultDate = diffDays + "days " + diffHours + "Hours "
                    + diffMinutes + "Min " + diffSeconds + "S";
            txtDate.setText(resultDate);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    public Cursor getAllRows(PendingIntent notificationIntent) {
        String where = null;

        c = database.query(true, TABLE_NAME, ALL_KEYS, where, null, null, null,
                null, null);
        if (c != null) {

            c.moveToFirst();


            while (!c.isAfterLast()) {
                listdetail = new ItemDetails();

                listdetail.setTeam1(c.getString(c.getColumnIndex("team1")));

                listdetail.setTeam2(c.getString(c.getColumnIndex("team2")));

                listdetail.setDate_match(c.getString(c
                        .getColumnIndex("match_date")));


                listdetail.setTime_match(c.getString(c
                        .getColumnIndex("match_time")));



                 // if the pick up date from the database is equal to the current date the notification will pop up 

                long i =new Date().getTime()/1000;

                 //// from the internet 
                 int index = c.getColumnIndex("match_date");
                 long date = c.getLong(index);
                 ////////
                 Log.e("inside the Shownotification", "index is" + index);


                //if(time == i){

                     Log.e("inside the Shownotification", "date is" + date);

                    NotificationCompat.Builder builder = new Builder(
                            getApplicationContext());
                    Notification notification = builder
                            .setSmallIcon(R.drawable.fifa_2014_4)
                            .setContentTitle("Up Comming Match")
                            .setContentText(
                                    c.getString(c.getColumnIndex("match_date"))
                                            + (c.getColumnIndex("team1"))
                                            + (c.getColumnIndex("team2"))).build();


                    displayNotification(notification);



            //}

                c.moveToNext();
        }


      }
        return c;
    }

    // for the notification

    private PendingIntent preparePendingIntent() {
        Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);

        PendingIntent pendingIntent = PendingIntent.getActivity(
                getApplicationContext(), 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);

         //Log.e("inside the preparePendingIntent", "inside preparePendingIntent");

        return pendingIntent;


    }

    private void showNotification() {



        PendingIntent notificationIntent = preparePendingIntent();
        getAllRows(notificationIntent);

        c.moveToFirst();




    }

    private void displayNotification(Notification notification) {
        Log.e("inside the displayNotification", "inside displayNotification");


        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(myNotificationId, notification);
    }


}

1 个答案:

答案 0 :(得分:0)

比较日期可以是这样的。首先以毫秒为单位将日期值存储在数据库中。例如,您可以像这样设置它

myCal.set(Calendar.YEAR, year);
myCal.set(Calendar.MONTH, monthOfYear);
myCal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
Long dateValue =  myCal.getTimeInMillis();//Store this value on your database 

现在从数据库中检索此值并将其设置为日历值。

curCal.setTimeInMillis(taskTime);

要找到差异,只需要一个像这样的课程

DateUtils.getRelativeTimeSpanString(time, now, DateUtils.HOUR_IN_MILLIS);//current time compared with 'now'(both long millisecond values).
//You can also get other values like Days, minutes ,etc