请帮助...我是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)*