5

是否有可能有某种类型转换器允许 Sync Framework 将字符串“0”/“1”视为 false/true 的布尔值。根据bool.parse文档,默认情况下不支持它,所以有没有办法解决它?

如果有人可以提出不同的方法来解决此问题,请提供更多详细信息:我有一个针对 android 的自定义 Sync Framework 客户端实现,并且由于它使用 SQLite 数据库,因此我无法对表字段强制执行一些严格的数据类型。我可以想出约定用“Is”前缀来表示布尔字段,但这很讨厌。另一件事是 SQLite 中的布尔值被视为数字类型,因此向 SQLite 数据库插入/更新布尔值 false/true 会自动将它们转换为 0/1,我不想在 android 端引入一些 TRUE/FALSE = 1/0 转换.

欢迎任何想法。

[更新] 更多细节:服务器端包含一些使用 Microsoft Sync Framework 4.0 CTP 的服务。除了创建范围等之外,没有太多要配置的东西。客户端生成变更集并使用 JSON 格式将其传输到服务器。变更集来自 SQLite 数据库(并且 SQLite 除了数字 0/1 之外没有任何本机布尔表示),因此在读取数据库时没有迹象表明即将到来的数据是布尔类型。字段值作为带有数值(“0”或“1”)的字符串序列化为 JSON 对象,因此服务器端在尝试将其解析为布尔值时失败。

顺便说一句,如果进行单向客户端到服务器同步,则可以解决它。我手动将服务器端实体字段类型设置为字节,同步框架很好地将其用作“位”数据库类型。此解决方法不适用于服务器到客户端。

4

4 回答 4

2

C#/.NET 中的常用方法是使用Convert.ToBoolean()

于 2011-04-29T14:20:21.333 回答
0

I do not want to introduce some TRUE/FALSE = 1/0 conversion on android side

It seems you will have to since there is no boolean type in SQLite.

boolean active = cursor.getInt(column_idx)==1;
于 2011-04-29T14:22:59.177 回答
0

对于同步框架位,您是否尝试过实现拦截器来拦截更改并进行转换?请参阅:如何:使用拦截器在服务器上扩展业务逻辑

于 2011-05-01T01:49:01.103 回答
0

所以它接缝不可能以任何简单的方式完成我的要求。最后,我选择为 android 同步库编写附加功能来解析 SQLite 表定义并使用字段描述来格式化传出同步数据。

谢谢大家的努力。

于 2011-05-03T09:53:19.643 回答