时间服务无效。在运行它时显示“不幸停止”

时间:2016-03-08 16:15:19

标签: java android eclipse sqlite

请帮助...我是android新手,我正在Eclipse Juno做我的第一个项目。 我有一个带报警服务的Reminder模块。提醒时间和日期存储在Sqlite数据库中,表名为reminder_tb。 保存这些值在ReminderActivity.java中完成,AlarmService完成创建一个新的Java页面TimeService.java,这个页面从我的主页面调用(intent),即LoginActivity.java

首次运行我的应用程序没有任何错误。下一天我再次运行它的节目:UNFORTUNATELY STOPPED

这是我的ReminderActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reminder);
    //open sqlite and fetch id from xpence and pass to php page
    SQLiteDatabase db = openOrCreateDatabase("xpence", MODE_PRIVATE, null);
final   Cursor cur=db.rawQuery("select * from login",null); 
     //save details on click

    Save.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            AmountString=Amount.getText().toString().trim();
            DateString=Date.getText().toString().trim();
            TimeString=Time.getText().toString().trim();
            DescString=Desc.getText().toString().trim();


            if (cur.moveToFirst())
            {
                id = cur.getString(0).toString();
                doSaveRem(AmountString,DateString,TimeString,DescString,id);

            }




        }


    });
}

public void doSaveRem(final String AmountString,final String DateString,final String TimeString,final String DescString,final String id)
{

    //Toast.makeText(getApplicationContext(), "Loaded"+AmountString+DateString+TimeString+DescString+id,Toast.LENGTH_SHORT).show();

    db=openOrCreateDatabase("xpence", MODE_PRIVATE, null);

    //TABLE FOR SMS AND NOTIFY
    //Insert to SMSNOTIFY
        db.execSQL("create table if not exists reminder_tb(amount varchar,date varchar,time varchar,desc varchar,id,active_flag INTEGER DEFAULT 0)");
        db.execSQL("insert into reminder_tb(amount,date,time,desc,id) values('"+AmountString+"','"+DateString+"','"+TimeString+"','"+ DescString+"','"+id+"')");
        Cursor   c = db.rawQuery("SELECT * FROM reminder_tb", null);
        c.moveToFirst();
        if(c.getCount()>0)
         {

            Toast.makeText(getApplicationContext(),"Saved!",Toast.LENGTH_LONG).show();
            Amount.setText("");
            Date.setText("");
            Time.setText("");
            Desc.setText("");

         }
         db.close();
         finish();
}

//// - 这是TimeService.java

     public class TimerService extends Service 
                    {
                        String dateString;
                         String timeString;
                         private int year;
                         private int month;
                         private int day;
                         private int hour;
                         private int minute;
                         private String date;
                       // private Cursor c;
                        private  SQLiteDatabase db;
                         // constant
                        public long  NOTIFY_INTERVAL = 1000;
                        // run on another Thread to avoid crash
                        private Handler mHandler = new Handler();
                        // timer handling
                        private Timer mTimer = null;
                        @Override
                        public IBinder onBind(Intent intent)
                        {
                            return null;
                        }
                        @Override
                        public void onCreate() 
                        {
                        // cancel if already existed
                            if (mTimer != null) 
                            {
                                mTimer.cancel();
                            } 
                            else 
                            {
                                // recreate new
                                mTimer = new Timer();
                            }
                            // schedule task
                            mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
                           }
                    class TimeDisplayTimerTask extends TimerTask 
                        {
                           @Override
                            public void run()
                            {
                                // run on another thread
                                mHandler.post(new Runnable() 
                                {
                                   @Override
                                    public void run() 
                                    {
                                        AlarmService();

                                    }

                                });
                            }
                        }
                    private void AlarmService()
                        {
                          //for date
                             final Calendar ca = Calendar.getInstance();
                             year  = ca.get(Calendar.YEAR);
                             month = ca.get(Calendar.MONTH)+1;
                             day   = ca.get(Calendar.DAY_OF_MONTH);
                             date =year+"-"+month+"-"+day;
                             final Calendar c1 = Calendar.getInstance();
                             hour = c1.get(Calendar.HOUR_OF_DAY);
                            minute = c1.get(Calendar.MINUTE);
                              String timeSet = "";
                             if (hour > 12)
                             {
                                 hour -= 12;
                                 timeSet = "PM";
                             } else if (hour == 0)
                             {
                                 hour += 12;
                                 timeSet = "AM";
                             }
                     else if (hour == 12)
                                 timeSet = "PM";
                             else
                                 timeSet = "AM";
                      String minutes = "";
                             if (minute < 10)
                                 minutes = "0" + minute;
                             else
                                 minutes = String.valueOf(minute);
                      String TimeString = new StringBuilder().append(hour).append(':').append(minutes).append(" ").append(timeSet).toString();
                      db = openOrCreateDatabase("xpence", Context.MODE_PRIVATE, null);
                             String tableName="reminder_tb";
                             Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
                             Cursor   c = db.rawQuery("SELECT * FROM reminder_tb",null);
                             c.moveToFirst();
                            if( cursor!=null)
                             {
                                 if(cursor.getCount()>0) 
                                    {
                                      cursor.close();
                                       c = db.rawQuery("SELECT * FROM reminder_tb where date='"+date+"' and time='"+TimeString+"' and active_flag=0" , null);
                                      c.moveToFirst();
                                      if(c.getCount()>0)
                                       {
                                        Toast.makeText(getApplicationContext(), "REMINDER: " + c.getString(3) + "Amount:"+c.getString(0)+" On "+date+","+TimeString, Toast.LENGTH_LONG).show();       
                                        db.execSQL("update reminder_tb SET active_flag=1 WHERE date='"+date+"' and time='"+TimeString+"'");

                                        }
                                    c.close();              
                                 }
                                cursor.close();
                             }
                             db.close();
                         }
                    }

/// - LoginActivity.java

Intent serviceIntent = new Intent(LoginActivity.this,TimerService.class);     LoginActivity.this.startService(serviceIntent);

  • 这是LogCat

      

    03-08 15:50:20.481:E / Trace(1799):错误打开跟踪文件:没有这样的   文件或目录(2)03-08 15:50:21.121:D / dalvikvm(1799):   GC_CONCURRENT释放44K,4%免​​费2768K / 2876K,暂停7ms + 2ms,总计   52ms 03-08 15:50:21.461:D / dalvikvm(1799):GC_FOR_ALLOC释放8K,3%   免费2829K / 2912K,暂停36ms,总计48ms 03-08 15:50:21.561:   I / dalvikvm-heap(1799):将堆(frag case)增长到7.820MB for   5242892-byte allocation 03-08 15:50:21.581:D / dalvikvm(1799):   GC_FOR_ALLOC释放<1K,2%免费7949K / 8036K,暂停25ms,总计25ms   03-08 15:50:21.641:D / dalvikvm(1799):GC_CONCURRENT释放&lt; 1K,2%免费   7948K / 8036K,暂停13ms + 2ms,总计58ms 03-08 15:50:22.912:   E / SQLiteLog(1799):( 1)没有这样的表:reminder_tb 03-08 15:50:22.931:   D / AndroidRuntime(1799):关闭VM 03-08 15:50:22.931:   W / dalvikvm(1799):threadid = 1:线程退出未捕获的异常   (group = 0xb2d0a908)03-08 15:50:22.912:E / SQLiteLog(1799):( 1)没有这样的   table:reminder_tb 03-08 15:50:22.931:D / AndroidRuntime(1799):   关闭VM 03-08 15:50:22.931:W / dalvikvm(1799):threadid = 1:   线程退出与未捕获的异常(组= 0xb2d0a908)03-08   15:50:22.951:E / AndroidRuntime(1799):致命异常:主要03-08   15:50:22.951:E / AndroidRuntime(1799):   android.database.sqlite.SQLiteException:没有这样的表:reminder_tb   (代码1):,编译时:SELECT * FROM reminder_tb 03-08   15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteConnection.nativePrepareStatement(母语   方法)03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteQuery。(SQLiteQuery.java:37)03-08   15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   com.ANSAR.xpence.TimerService.AlarmService(TimerService.java:149)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   com.ANSAR.xpence.TimerService.access $ 1(TimerService.java:91)03-08   15:50:22.951:E / AndroidRuntime(1799):at   com.ANSAR.xpence.TimerService $ TimeDisplayTimerTask $ 1.run(TimerService.java:81)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   android.os.Handler.handleCallback(Handler.java:725)03-08   15:50:22.951:E / AndroidRuntime(1799):at   android.os.Handler.dispatchMessage(Handler.java:92)03-08   15:50:22.951:E / AndroidRuntime(1799):at   android.os.Looper.loop(Looper.java:137)03-08 15:50:22.951:   E / AndroidRuntime(1799):at   android.app.ActivityThread.main(ActivityThread.java:5041)03-08   15:50:22.951:E / AndroidRuntime(1799):at   java.lang.reflect.Method.invokeNative(Native Method)03-08   15:50:22.951:E / AndroidRuntime(1799):at   java.lang.reflect.Method.invoke(Method.java:511)03-08 15:50:22.951:   E / AndroidRuntime(1799):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   03-08 15:50:22.951:E / AndroidRuntime(1799):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)03-08   15:50:22.951:E / AndroidRuntime(1799):at   dalvik.system.NativeStart.main(Native Method)*

0 个答案:

没有答案