实际上,我有一个使用 ContentObserver 列出更改的表,并且在 OnChange() 中,我触发了 SyncCall。

我的要求是仅在插入或更新操作时进行 SyncCall,如果操作是删除,我不想进行 SyncCall。

为表注册 contentObserver。

ContentResolver mResolver = context.getContentResolver();
    // Construct a URI that points to the content provider data table
    Uri mUri = HistoryDetailsContract.HistoryEntries.CONTENT_URI;
    /*
     * Create a content observer object.
     * Its code does not mutate the provider, so set
     * selfChange to "false"
     */
    TableContnetObserver observer = new TableContnetObserver(null);
    /*
     * Register the observer for the data table. The table's path
     * and any of its sub paths trigger the observer.
     */
    mResolver.registerContentObserver(mUri, true, observer);

我的 ContentObserver 类。
public class TableContnetObserver extends ContentObserver {

public TableContnetObserver(Handler handler) {
    super(handler);
}

/*
 * Define a method that's called when data in the
 * observed content provider changes.
 */
@Override
public void onChange(boolean selfChange, Uri changeUri) {
    /*
     * Ask the framework to run your sync adapter.
     * To maintain backward compatibility, assume that
     * changeUri is null.
     */
    //ContentResolver.requestSync(GenericAccountService.GetAccount(), HistoryDetailsContract.AUTHORITY, new Bundle());
    SyncUtils.TriggerRefresh();
}

有没有办法使用 ContentObserver 只监听插入和更新操作?

或者至少有没有一种方法可以让我知道触发了 ContentObserver 类中的 onChange() 方法的操作类型(插入、更新或删除)?

最佳答案

ContentObserver 本身无法知道是什么操作导致了变化。如果您是发送更改通知的人,那么您可以

  • 向 URI 附加一些内容以指示更改内容,例如一种
    查询参数或 fragment
  • 为不同的操作通知不同的 URI 和
    听那些也/代替。
  • 关于Android:是否可以使用 ContentObserver 仅监听插入和更新操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32482256/

    10-09 01:28