Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> Android裡監視數據庫的變化

Android裡監視數據庫的變化

編輯:高級開發

 以launcher app為例說明,此功能的核心是ContentResolver 的notifyChange 和 registerContentObserver 接口。

  Launcher.Java的一個方法(在onCreate方法裡調用),這裡即是為要監視的對象注冊Observer。我這裡討論如何監視數據庫數據的變化,所以要監視的對象自然是數據庫了, LauncherSettings.Favorites.CONTENT_URI 指向的就是一張數據庫表(詳見launcher app源碼)。

  private void registerContentObservers() {

  ContentResolver resolver = getContentResolver();

  resolver.registerContentObserver(LauncherProvider.CONTENT_APPWIDGET_RESET_URI, true,

  mWidgetObserver);

  resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mObserver);

  }

  其中mObserver是個 FavoritesChangeObserver 類型的對象(只以它為例講解),FavoritesChangeObserver類的定義如下:

  private class FavoritesChangeObserver extends ContentObserver {

  public FavoritesChangeObserver() {

  super(new Handler());

  }

  @Override

  public void onChange(boolean selfChange) {

  onFavoritesChanged();

  }

  }

  onFavoritesChanged()方法是Observer定義的一部分,用於在接收到通知後進行相應的處理操作。這個方法裡的內容不展開敘述,它的工作就是刷新Home界面。

  private void onFavoritesChanged() {

  mDesktopLocked = true;

  mModel.loadUserItems(false, this, false, false);

  }

  LauncherProvider.Java

  這裡是實際操作數據庫的地方,操作完成之後會視情況通知前面注冊的Observer。

  private void sendNotify(Uri uri) {

  String notify = uri.getQueryParameter(PARAMETER_NOTIFY);

  if (notify == null || "true".equals(notify)) {

  getContext().getContentResolver().notifyChange(uri, null);

  }

  }

  @Override

  public Uri insert(Uri uri, ContentValues initialValues) {

  SqlArguments args = new SqlArguments(uri);

  SQLiteDatabase db = mOpenHelper.getWritableDatabase();

  final long rowId = db.insert(args.table, null, initialValues);

  if (rowId <= 0) return null;

  uri = ContentUris.withAppendedId(uri, rowId);

  sendNotify(uri);

  return uri;

  }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved