为什么服务器端传过来的数据json转换成对象json对象之后,顺序会被打乱

混淆引起的数据丢失及数据错乱--(服务器返回json字符串,客户端使用实体类进行解析)
好久没有写博客了,近期事太多,生活琐事,换工作,刚入职后项目节奏很快,赶着时间要上架,早出晚归,没有时间来写博客。。。今天发布上架了,终于可以稍微松一口气,写一篇日志,总结一下近期工作中遇到的一些值得记录下来的内容。
今天项目写完了一个模块,终于开始了最后的上架发布前的测试;
第一步,测试环境下,debugger测试各个功能效果及数据显示,和预期一致,测试通过,
第二步,切换到正式服务器,debugger测试一遍,数据及效果都是没问题的,
第三步,打包测试,然而这个时候,出问题了,部分数据没有显示出来,是的大部分的文字信息没有显示出来。
奇怪啊,怎么部分数据没有显示出来呢?难道是服务器端,没有传过来?不应该啊,ios手机测试都是没问题的啊,于是debug单步调试,看看返回来的数据到底是什么,随便测试了一个接口,拿到json
string一看没问题啊,该返回来的字段都有啊,难道是解析出问题了??不可能吧,如果一个接口的数据解析出问题了,岂不是会直接异常抛出了,怎么可能有部分数据显示出来呢?拿出神器,fiddler,配置好代理,抓包,每一个接口都看看,到底是什么鬼,后来发现,抓包抓到的每一个接口都是正常的,里面每一个字段都有,每一个字段对应的值都是有的,难道是我settext显示出内容的时候出问题了?仔细检查了一遍,没问题啊,奇怪,最后一招:对一个listview做测试,在adapter中从getview方法的第一行开始,单步调试,逐行执行,我就不信还找不到问题,最后的最后,找到问题了,在单步调试的时候,每一行代码都是正常执行了,但是执行结束后依然没有文字显示出来,那么就可以断定textView的settext的string是空的,是没有内容的,再次debug单步调试,的确,里面没有值,可是接口里明明传过来了啊。。。。。
好了不多扯淡了,,,,来解决问题。
问题的描述:
接口传回来的数据是json字符串,是没有问题的,该有的数据该有的字段都是有的,解析使用的实体类也是匹配的,在debugger情况下所有数据测试也是正常显示,但是项目打包安装以后,一部分字段没有显示出来,
问题引起的原因:
因为项目加入了混淆,在混淆语法中,要把实体类JavaBean放出来,不能加入混淆,网络请求解析数据的实体类如果混淆,就会发生字段的错乱,在我理解里面,这些字段被成功解析了,但是由于混淆,相当于二次加密了,所以取数据的时候取到的是加密之后的数据,所以就错乱甚至丢失而不显示了。
解决办法:
很简单,出什么问题解决什么问题呗,不要混淆实体类,就可以了。
&& 说到这里,项目的代码结构就非常的重要
了,如果把所有的实体类放进一个包中,在proguard-project.txt文件中,混淆语法中,排除这个包下面的所有的类的混淆就可了,
比如:-keep class com.family.heyqun.module_mine.entity.* {
这是表示不混淆这个包下面的所有文件。*嘛,表示全部。
如果代码结构比较混乱,因为路劲不同,在这里只能逐个文件逐个文件的加入不混淆的语法说明,造成很大的不便,而且在以后的代码更新,版本迭代中都会非常痛苦,收到非常大的制约。所以,代码结构一定要注意,分包方式,要清晰、科学,代码冗余在一定程度上可以原谅,但是代码混乱就是不可接受不能容忍的了。
总结起来几句话:
1,在做项目代码混淆的时候,放过实体类的混淆,2,注意代码结构的合理安排,3,注意代码规范,包括命名规范,大到类、对象、属性、方法的命名规范,小到代码对其格式,是一个tab键,还是两个空格键,都要做到严格要求,当然这个代码格式,在eclipse中可以直接通过Ctrl+shift+F来整理。
这个问题既然是混淆引起的,那么怎么混淆工程呢?混淆如何做?咋样是进行了混淆,咋样是没有进行呢?混淆语法是咋样的,在下次再写吧。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用户名:zhaojianping
文章数:52
评论数:12
访问量:191040
注册日期:
阅读量:1297
阅读量:3317
阅读量:446979
阅读量:1132280
[匿名]lk_well:
51CTO推荐博文
server端:
response.setContentType(&text/plain&);
response.setCharacterEncoding(&UTF-8&);
PrintWriter&out&=&response.getWriter();
UserDAO&userDAO&=&new&UserDAO();
ArrayList&list&=&userDAO.queryUser();
JSONArray&array&=&JSONArray.fromObject(list);
out.write(array.toString());
out.flush();
out.close();
client端:
说明:在服务器端将list集合转化为JSONArray对象,以字符串的形式传到Android的客户端,再在客户端,将字符串转换为JSONArray对象,遍历JSONArray对象即可。
了这篇文章
类别:┆阅读(0)┆评论(0)
14:54:20 08:55:04 15:39:01预处理服务器返回的数据(Json转对象)(免费试听)_百度文库当前位置: →
→ 前端与后端的交互由JSON传实现怎么进行服务器端对传入参数的部分修改
前端与后端的交互由JSON传实现怎么进行服务器端对传入参数的部分修改
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 在线等。前端与后端的交互由JSON传实现。如何进行服务器端对传入参数的部分修改。我遇到这样一个问题。我使用的是SPRING mvc的...
"前端与后端的交互由JSON传实现怎么进行服务器端对传入参数的部分修改"::
在线等。前端与后端的交互由传实现。如何进行服务器端对传入参数的部分修改。我遇到这样一个问题。我使用的是spring mvc的框架 ,前端使用的是linb前后端交互使用的是串来实现具体数据传输。我有这样的一个需求,需要在前台提交修改请求的时候自动添加当前登录用户的信息到被修改的实体类中,再不考虑修改原有代码的基础上如何加入这样的一个通用功能,请大家帮忙想想办法。整体前后端的交互 使用的是rest 风格的交互模式。------解决方案--------------------ajax
------解决方案--------------------不改代码就要多一个功能?没听说过。
------解决方案--------------------dwr
------解决方案--------------------都用spring了,干嘛不考虑aop呢?
------解决方案--------------------可以考虑aop技术来实现,在你需要操作的方法上加一个切面,该切面的作用就是自动加上当前登录用户信息 搜索此文相关文章:ON传实现怎么进行服务器端对传入参数的部分修改此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
前端与后端的交互由JSON传实现怎么进行服务器端对传入参数的部分修改_JavaWeb相关文章
JavaWeb_总排行榜
JavaWeb_最新
JavaWeb_月排行榜
JavaWeb_周排行榜
JavaWeb_日排行榜这些JSON知识你不一定知道-前端开发博客
推荐文章 1402Views 1994Views 3349Views 2150Views 1080Views热门文章
26,457Views
21,405Views
17,892Views
11,603Views
9,269Views
8,809Views对这篇文章不满意吗?百度搜索:");

我要回帖

更多关于 服务器端发送json数据 的文章

 

随机推荐