2011-06-16 52 views
3
public class IdService extends Service { 
    private UploadFilesTask task; 
    DBAdapter dbs; 

    @Override 
    public IBinder onBind(Intent i) {  
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate();    
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     if(Networking.isNetworkAvailable(this)){ 
      if (intent.hasExtra("start") && taskIsNotRunning()) { 
       task = new UploadFilesTask(); 
       task.execute();    
      } 
     } 
     else{ 
      if (intent.hasExtra("start") && taskIsNotRunning()) { 
       Calendar cal = Calendar.getInstance(); 
       cal.add(Calendar.MINUTE, 5); 
       String start = "start"; 
       Intent i = new Intent(IdService.this, IdService.class); 
       i.putExtra("start", start); 
       PendingIntent sender = PendingIntent.getService(this, 192837, i, PendingIntent.FLAG_UPDATE_CURRENT); 
       AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
       am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 
      } 
     } 
    } 

    private boolean taskIsNotRunning() { 
     return task == null || task.getStatus() != AsyncTask.Status.RUNNING || task.isCancelled(); 
    } 

    @Override 
    public void onDestroy() { 
      super.onDestroy(); 

    } 
    private class UploadFilesTask extends AsyncTask<Object, Object, Object> { 
     @Override 
     protected Object doInBackground(Object... arg0) { 
      SQLiteDatabase db = dbs.getWritableDatabase(); 
      ContentValues values = new ContentValues(); 
      values.put(DBAdapter.ID, "blank"); 
      db.insert(DBAdapter.Table, null, values); 
      return null;    
     } 

     @Override 
     protected void onPostExecute(Object result) {  
      super.onPostExecute(result); 
      stopSelf(); 
     } 
    } 
} 

我想运行一个服务,它将一个值插入到sql数据库的表中。如果没有互联网连接,我希望它等待5分钟,然后再次运行服务。AsyncTask可以在服务中运行并写入数据库吗?

代码中的问题在SQLiteDatabase db = dbs.getWritableDatabase(); 我可以评估服务中的数据库吗?如果是这样,我怎么让我的代码运行?谢谢

+0

你有什么错误?是否有任何其他连接到数据库? – 2011-06-16 09:27:05

+0

什么是dbs?你在哪里启动它? – 2011-06-16 10:12:15

+0

顶部的第三行 – Beginner 2011-06-16 10:23:36

回答

2

得到它的工作...需要this.dbs = new DBAdapter(getApplicationContext());

+0

如何每30秒运行一次服务? – Manikandan 2014-06-10 15:16:27

+0

@Manikandan阅读此篇文章:http://stackoverflow.com/questions/22043652/using-an-asynctask-inside-a-service-class – ymerdrengene 2014-09-25 14:47:25

2

是的,为什么不。使用常规方式。不要忘记添加SQLiteDatabse.setLockingEnabled(true);使数据库连接线程安全!

P.S.我看不到你在哪里开始asyncTask?

+0

task.execute(); – Beginner 2011-06-16 10:00:15

相关问题