HowTo: предоставление уведомлений в Android-приложении всякий раз, когда обновляется таблица SQLite

Я занимаюсь разработкой приложения для планшетов Android, используя sqllite 3.7.4, который выполните следующие действия:

  • Получение информации из пользовательского интерфейса

  • Выполняет некоторую логику и сохраняет связанную информацию с базой данных sqlite

  • Сохраненная информация должна быть отправлена ​​немедленно или по расписанию интервал (например, в 5:00 по дате xyz) по сети

В настоящее время мы разработали механизм диспетчера (поток), который постоянно обследует базу данных для новой информации, вставленной в базу данных. Поток извлекает информацию и отправляет ее в сетевой модуль.

Но я считаю, что это неправильный подход, поскольку Опрос каждый раз является накладными расходами. Могут быть моменты, когда ничего не нужно выполнять Это не в реальном времени, потому что мы проводим опрос каждые 5 секунд

So

Есть ли способ отправить триггер в мой сетевой модуль, как только информация будет обновлена ​​в базе данных?

Или любой лучший способ достичь этой задачи?

Спасибо заранее.

4 ответа

надеюсь, что это поможет вам

private Handler h;
 // in create time
 h = new Handler();
// call where you want
h.postDelayed(myRunnable2, 1000); // after 1000 millisecond this function call automatically 
// this function 
private Runnable myRunnable2 = new Runnable() {
 public void run() {
 // do some thing
 h.postDelayed(myRunnable2, 1000);
 }
 };


Этот вопрос примерно год назад, но я думаю, что это обычная проблема. Вот как я обработал изменения в базе данных:

В моем адаптере (ADAPTER SQL) у меня есть методы для обновления/удаления или вставки данных в базу данных. Как этот метод:

public long addProduct(String code, String name ... String gid, String gdate) {
 ContentValues initialValues = new ContentValues();
 initialValues.put(KEY_CODE, code);
 initialValues.put(KEY_NAME, name);
 ...
 initialValues.put(KEY_CHECK, this.checkfalse);
 initialValues.put(KEY_GID, gid);
---------
 Intent i = new Intent("data_inserted");
 i.putExtra("date", date);
 sendBroadcast(i);
---------
 return mDb.insert(SQLITE_TABLE, null, initialValues);
 }

После того, как произойдут изменения, он отправит намерение трансляции. Чтобы получить этот первый регистр вашего широковещательного приемника в вашем onCreate методе (uploaderClass или что-то еще). Это будет выглядеть так:

registerReceiver(Updated, new IntentFilter("data_inserted"));

И этот метод обрабатывает следующие действия!

private final BroadcastReceiver Updated= new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
 doSomething(); // Data was inserted upload it 
 }
};

EDIT:

Чтобы получать только новые элементы из базы данных, я подписываю новые продукты. У меня есть "информация" colum, которая может содержать строки, такие как "загрузить", "обновить" или "удалить". Затем я извлекаю все элементы из базы данных, которые содержат эти специальные строки, и загружаю их. После этого я устанавливаю их в null или пустую строку. Что бы вы ни пожелали. Надеюсь, я объяснил это не сложным:)


Вы можете создать своего собственного прослушивателя базы данных всякий раз, когда что-то обновляется в базе данных, он будет извлекать информацию и отправлять ее в сеть. Я думаю, что я уясню некоторые идеи для реализации этой вещи.


Я думаю, что использование загрузчиков - это то, что вам нужно: http://developer.android.com/guide/components/loaders.html

Вы можете отправлять данные в свою сеть по методу onLoadFinished

licensed under cc by-sa 3.0 with attribution.