首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在内容提供商中更新、插入、删除而不生成通知?

如何在内容提供商中更新、插入、删除而不生成通知?
EN

Stack Overflow用户
提问于 2012-05-31 05:03:10
回答 1查看 1.3K关注 0票数 0

我已经在SQLite数据库上编写了一个自定义内容提供程序。内容提供商扩展SQLiteContentProvider。内容提供商在许多插入、删除或更新操作结束时发送通知。现在,我希望在数据库上执行一些更新、插入和删除操作,但不希望生成任何通知。如何做到这一点?

来自SQLiteContentProvider#bulkInsert的代码示例

代码语言:javascript
运行
复制
@Override
    public int bulkInsert(Uri uri, ContentValues[] values) {
        int numValues = values.length;
        mDb = mOpenHelper.getWritableDatabase();
        mDb.beginTransactionWithListener(this);
        try {
            for (int i = 0; i < numValues; i++) {
                Uri result = insertInTransaction(uri, values[i]);
                if (result != null) {
                    mNotifyChange = true;
                }
                mDb.yieldIfContendedSafely();
            }
            mDb.setTransactionSuccessful();
        } finally {
            mDb.endTransaction();
        }

        onEndTransaction();
        return numValues;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-31 05:07:53

我建议在调用不需要通知的update/insert/delete时使用不同的URI

所以你会有YourMetadata.CONTENT_URIYourMetadata.CONTENT_URI_DONT_NOTIFY

然后,您可以照常执行插入/更新/删除操作。在通知之前,请检查您的uri是否是不应该通知的uri。

如果您有一个URI匹配器,您可以使用匹配结果中的代码来确定您在哪个URI上执行了批量插入

如果没有,您可以使用

代码语言:javascript
运行
复制
boolean notifyChanges = YourMetadata.CONTENT_URI.equals(uri); //will be true if we want to notify on the URI

然后在插入后使用notifyChanges的值来确定是否要通知。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10824229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档