Java 时间服务不工作。运行时间服务时显示;不幸的是,我停了下来;
请帮助…我是android新手,我正在EclipseJuno中做我的第一个项目。 我有一个带有报警服务的提醒模块。提醒时间和日期存储在Sqlite数据库中,表名为rementer_tb。 这些值的保存在rementeractivity.java中完成,AlarmService创建一个新的java页面TimeService.java,该页面从我的主页ie LoginActivity.java调用(intent)Java 时间服务不工作。运行时间服务时显示;不幸的是,我停了下来;,java,android,eclipse,sqlite,Java,Android,Eclipse,Sqlite,请帮助…我是android新手,我正在EclipseJuno中做我的第一个项目。 我有一个带有报警服务的提醒模块。提醒时间和日期存储在Sqlite数据库中,表名为rementer_tb。 这些值的保存在rementeractivity.java中完成,AlarmService创建一个新的java页面TimeService.java,该页面从我的主页ie LoginActivity.java调用(intent) @Override protected void onCreate(Bundle sa
@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();
}
第一次运行时,我的应用程序运行正常,没有任何错误。第二天,当我再次运行时,它的显示:不幸停止
这是我的提醒活动.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();
}
}
公共类TimerService扩展服务
{
字符串日期字符串;
字符串时间字符串;
私人国际年;
私人整数月;
私人国际日;
私人整数小时;
私人整数分钟;
私有字符串日期;
//专用游标c;
专用数据库数据库;
//不变的
公共长通知间隔=1000;
//在另一个线程上运行以避免崩溃
私有处理程序mHandler=新处理程序();
//计时器处理
专用定时器mTimer=null;
@凌驾
公共IBinder onBind(意向)
{
返回null;
}
@凌驾
public void onCreate()
{
//如果已经存在,则取消
如果(mTimer!=null)
{
mTimer.cancel();
}
其他的
{
//重新创造新的
mTimer=新计时器();
}
//计划任务
mTimer.scheduleAtFixedRate(新的TimeDisplayTimerTask(),0,通知时间间隔);
}
类TimeDisplayTimerTask扩展了TimerTask
{
@凌驾
公开募捐
{
//在另一个线程上运行
mHandler.post(新Runnable()
{
@凌驾
公开募捐
{
报警服务();
}
});
}
}
私有无效报警服务()
{
//约会
最终日历ca=Calendar.getInstance();
年=ca.get(日历年);
月=ca.get(日历月)+1;
day=ca.get(日历,每月的第天);
日期=年+“-”+月+“-”+日;
最终日历c1=Calendar.getInstance();
小时=c1.get(日历小时);
分钟=c1.get(Calendar.minute);
字符串时间集=”;
如果(小时>12)
{
小时-=12;
timeSet=“PM”;
}否则,如果(小时==0)
{
小时+=12;
timeSet=“AM”;
}
否则,如果(小时==12)
timeSet=“PM”;
其他的
timeSet=“AM”;
字符串分钟数=”;
如果(分钟<10)
分钟=“0”+分钟;
其他的
分钟=字符串.valueOf(分钟);
String TimeString=new StringBuilder().append(小时).append(“:”).append(分钟).append(“”).append(时间集).toString();
db=openOrCreateDatabase(“xpence”,Context.MODE_PRIVATE,null);
String tableName=“提醒\u tb”;
Cursor Cursor=db.rawQuery(“从sqlite_master中选择不同的tbl_名称,其中tbl_名称='”+tableName+“'”,null);
游标c=db.rawQuery(“从提醒中选择*”,null);
c、 moveToFirst();
如果(光标!=null)
{
if(cursor.getCount()>0)
{
cursor.close();
c=db.rawQuery(“从提醒_tb中选择*,其中日期=”“+date+”,时间=”“+TimeString+”,活动_标志=0”,null);
c、 moveToFirst();
如果(c.getCount()>0)
{
Toast.makeText(getApplicationContext(),“提醒:”+c.getString(3)+“金额:”+c.getString(0)+“在”+date+”,“+TimeString,Toast.LENGTH_LONG).show();
db.execSQL(“更新提醒”tb SET active_标志=1,其中日期='“+date+”,时间