2 ly568048459 ly568048459 于 2016.02.29 15:10 提问

Android Gson解析boolean错误

今天突然出现了这种怪异的现象,我使用gson来解析服务器返回的json数据,json中有个字段isSuccess,是boolean类型,今天在请求的时候始终得不到正确的回应,一调试才知道isSuccess为false,但是返回的json中isSuccess是为true的,这种情况也不是每次都会发生,有时候又是正常的,服务器返回的json也是一样的,但是就会出现isSuccess会被解析成false的情况,有人遇到过这种情况吗?

发现了新的情况,我手动截取json中isSuccess字段,然后使用Boolean.valueOf(String)来转换,但是怪异的情况出现了,String参数为true,转换出来的value确实false,彻底凌乱了

我换了个方法,不用Boolean.valueOf(String)了,自己判断字符串来转换为true或者false,倒是不会出现这个问题了,不过上述问题留在这,等待大神来解答

找到问题所在了,我这里有个功能需要用到反射,我用反射取了Boolean.value,因为是private final修饰符,所以用了函数Field.setAccessible(true),然后通过反射的方法给Boolean.value设置了值,结果后面Boolean无论怎么赋值都是前面设置的那个值了,所以在反射给Boolean.value设置了值后,要调用Field.setAccessible(false)就可以了,次奥,恼火啊

2个回答

menglele1314
menglele1314   2016.02.29 16:42

手写json直接的数据传递一般都是字符串,在更具字符串转换成你要的数据类型,比如null......

qq_24885195
qq_24885195 回复ly568048459: 遇到同样的问题了 求指导
大约一个月之前 回复
ly568048459
ly568048459 也许我描述得不清楚,举个例子吧{"isSuccess":true},这个就是服务器返回给我的json,客户端在转换为结构体的时候字段isSuccess就为false了,后来我手动截取了json中isSuccess字段,值为"true",通过Boolean.valueOf(String)来转换为boolean类型,但是转换出来却是false,怪异吧
接近 2 年之前 回复
ly568048459
ly568048459   2016.03.01 22:49

上面的结论是错误的,Field.setAccessible(true)后Boolean.value再也不能接受新值了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!