我目前正在开发一个与 RESTful 网络服务交互的 android 应用程序。客户端能够在 Web 服务上执行完整的 CRUD。在搜索了最佳实践之后,我观看了Google I/O 2010 关于 REST 客户端的主题演讲,几乎所有文章都引用了该主题演讲。
为了尽可能多地使用 android 平台,我决定使用选项 B,使用 aContentProvider
和 a SyncAdapter
。这为我提供了内置帐户系统、内容观察者和互联网可用时的定期同步。
因为我们应用程序的一项非常重要的功能是离线编辑和可用性(它用于接收不良的环境),我们希望尽可能多地在本地保存相关数据。
客户端使用Json中的RESTful API与服务器通信,来自服务器的数据使用模型上的Gson(POJO,普通旧 java 对象)进行反序列化。
为了使代码清晰易读,我尝试构建自己的对象映射器,而不是直接使用 a Cursor
。此映射器提供默认的 CRUD 操作,并在读取数据时将光标映射到模型,在写入数据时将模型映射到ContentValues 。
但是,这种架构感觉非常臃肿。
首先,不可能获得有关当前的可靠信息
SyncState
(以向用户提供反馈)。(现在使用这个 SO 答案“被黑”了)第二个问题是,对于我需要的每个资源:模型、映射器、表定义和 ContentProvider URI。仅针对一种资源就需要管理大量代码。
第三个问题是通过我的映射器需要模型,我阻止自己
CursorLoader
在活动中使用 a。
底线
我正在寻找一种可维护且轻量级的方式来获得离线内容并使用Json与 RESTful 网络服务同步。此外,我希望能够在我的代码中使用模型user.getName()
,因为它比开发人员更友好cursor.getString(cursor.getColumnIndex(UserDataSource.COLUMN_NAME));
(目前隐藏在我的 Mapper 类中)。
映射的一个很好的例子是Dapper与为 .NET 编写的Dapper Extensions相结合,但与我的方法类似,但是我的方法需要在许多不同的文件中定义所有列和字段(见上文)。
另外,我正在考虑ContentProvider
从我的代码中删除它,因为对于这样一个简单的任务,它感觉非常臃肿和过时。