【问题标题】:SQLite transactions with Google IO REST pattern's ContentProvider?使用 Google IO REST 模式的 ContentProvider 进行 SQLite 事务?
【发布时间】:2011-12-11 07:31:37
【问题描述】:

我正在尝试实现 Virgil Dobjanschi 在此视频中介绍的第二个 REST 客户端模型:

http://developer.android.com/videos/index.html#v=xHXn3Kg2IQE

这是我正在谈论的模型的高级图:

我按照建议实现了所有内容,但我有一个包含大量表的复杂 SQLite 数据库模型,我需要使用事务来使用从服务器检索到的全新数据更新我的本地数据(图片中的第 7 步)。

您有什么建议可以帮助我为这种情况实施事务性 ContentProvider 吗?

你们中的一些人可能会建议我使用原始 SQLite,但这样我不会利用 ContentProvider 提供的 ContentObservers、managedQueries 和数据库访问同步的优势。

任何帮助将不胜感激。

【问题讨论】:

  • 顺便喜欢那个视频。它真的帮助我理解了 REST。

标签: android rest transactions android-contentprovider googleio


【解决方案1】:

由于您无权访问 Level 11 API,因此您可以这样做。假设您想在更新方法中执行此事务:

final Cursor update(Uri uri, ContentValues values, String where, String[] selectionArgs)
{

   if(uri == uri1){
     //do stuff you normally do
   }
   //other uri stuff
   ...
   else if(uri == special_uri){
     //do your transaction stuff here
   }
}

在这种情况下,special_uri 是一个 uri,用于指示您将需要执行特殊的事务处理。换句话说,我们在这里使用 URI 来指示必须完成的事务。

【讨论】:

  • 我已经考虑在 URI 中使用标志,但我期待有一种更优雅的方法。我敢肯定这里有人已经面临过这个问题。无论如何,再次感谢您。
  • 您不必使用标志。您实际上可以有不同的 URI。这并没有那么不优雅,因为它仍然是 RESTful。
【解决方案2】:

您可以在 ContentProvider 中实现自定义函数来执行您的必要事务。然后,您可以使用处理器中的 call() 函数调用这些函数。

【讨论】:

  • 谢谢 Kurtis,它可以解决问题,除非它仅在运行 SDK >= 11 的设备上受支持。我的应用程序针对运行 Android 1.6 或更高版本的设备。 =(
猜你喜欢
  • 2011-10-05
  • 2012-02-25
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多