0

我观看了 virgil 的 android rest google io 视频并尝试实现它。

简而言之,这就是问题所在,但请继续阅读以了解详细信息。

ContentResolver query -> Content Provider Query -> 启动数据库更新服务,进行查询,返回游标

服务->更新数据库->广播数据库更新

活动 -> 注册广播 -> 接收 Contentresolver 查询。(我们回到了起点)

这变成了一个无限循环。

在我的内容提供者中,用于查询方法。我启动使用其余服务的 Intent 服务。然后查询方法查询本地数据库并返回游标。在意图服务的 onhandle() 方法中,我从 Web 服务检索新内容并写入数据库。然后我发送一个带有动作的本地广播。

在我的活动中,我注册了广播和 onreceive()。我调用 contentresolver.query 从数据库中获取新内容。这显然造成了一个循环问题。我回到内容提供商查询..服务..广播。

我希望能够在收到广播后停止广播。

我该如何解决这个问题。我应该使用 SQLitedatabase 查询而不是内容解析器吗?还是我应该以不同的方式发送广播。我可以发送另一个带有内容解析器查询的参数,例如广播后更新打开和关闭吗?我应该派生内容解析器并创建自定义查询方法吗?

4

1 回答 1

0

如果 REST 结果中没有新项目,则不要发送通知。

long id = db.insertWithOnConflict(getTableName(), null, values, SQLiteDatabase.CONFLICT_IGNORE);
if (id < 0) {
  return null;
}
Uri newUri = ContentUris.withAppendedId(getContentURI(), values.getAsInteger(getIdFieldName()));
Log.d(TAG, "New profile URI: " + newUri.toString());
getContext().getContentResolver().notifyChange(newUri, null);
于 2013-07-05T05:42:56.400 回答