Можно ли запустить AsyncTask внутри службы и записать в базу данных? - PullRequest
4 голосов
/ 16 июня 2011
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 минут, а затем снова запустить службу.

Проблема в коде находится в SQLiteDatabase db = dbs.getWritableDatabase (); Могу ли я оценить БД в рамках службы? Если так, как я могу заставить меня выполнить код? спасибо

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Получил работу ... нужно this.dbs = новый DBAdapter (getApplicationContext ());

2 голосов
/ 16 июня 2011

Да, почему бы и нет. Используйте обычный способ. Не забудьте добавить SQLiteDatabse.setLockingEnabled (true); сделать поток подключения к базе данных безопасным!

P.S. Я не вижу, где вы запускаете asyncTask?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...