(迁移过来的博文)重构后出现 IllegalStateException: Content has been consumed_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > (迁移过来的博文)重构后出现 IllegalStateException: Content has been consumed

(迁移过来的博文)重构后出现 IllegalStateException: Content has been consumed

 2013/7/19 0:58:32  zhangfortune  程序员俱乐部  我要评论(0)
  • 摘要:最近做了个androidnative应用。因为没做过,所以第一张卡果断跟产品要了8个天的时间,8个点吧。主要是因为前期要学习些知识。然后用6.5个点给做完了所有的。下面一部是要做重构了。做敏捷的,不能容忍那么长的代码啊。看见以后就恶心,不过重构重构着出现了bug。具体是这样的,有一块代码是做同步。上传数据,将服务器返回来的数据进行处理。因为在其他的地方也要做同步,所以考虑了一下,直接改为三步。第一步,构建StirngEntity;第二步,联网,上传数据,接受数据;第三部,处理数据
  • 标签:has Ten 博文 迁移

最近做了个android native应用。因为没做过,所以第一张卡果断跟产品要了8个天的时间,8个点吧。主要是因为前期要学习些知识。然后用6.5个点给做完了所有的。下面一部是要做重构了。做敏捷的,不能容忍那么长的代码啊。看见以后就恶心,不过重构重构着出现了bug。

具体是这样的,有一块代码是做同步。上传数据,将服务器返回来的数据进行处理。因为在其他的地方也要做同步,所以考虑了一下,直接改为三步。第一步,构建StirngEntity ;第二步,联网,上传数据,接受数据;第三部,处理数据。都知道联网是很耗时间的,要单起一个线程。重构的时候我将线程放在了第二部里面,觉得这里会很耗时间。其他地方只不过提供接口直接调用就好了。然后测试,在第3步出现了,httpResponse 空指针异常,不清楚是什么情况,就加了个判断 if(!httpResponse ==null)(handle(httpResponse););这空指针异常没有了,在getEnitity()的时候却出现了 IllegalStateException: Content has been consumed 异常,查了一下资料原来是httpEntity只能被用一次,感觉处在了刚才那个判断上。可是想来一下,为什么会出现一个空指针异常呢?而没重构的时候没事?

这时候想到了线程,因为主线程是不等待新起的线程,也就是打破了主线程的顺序执行,然后在新起的线程里面,返回的httpResponse是默认值null;所以就会出现了空指针异常。找到了根本原因。ok,这时候就有了针对性,把这个三步用一个线程来操作,这样子,3步就是一个线性的执行了。

啰嗦一下,说下个人心得吧:

1出现了问题,尤其是这种前一秒正确后一秒错误的情况,要注意分析。我看到有的程序员看到不正确就删掉,认为不正确。是,我承认不正确,可是你却没有分析为什么不正确。注意对比两个的不同之处。然后大部分就能得到处问题的原因了。如果你这样总是删除删除的话,不会有一些自己的思维。只能是一个底层的coder。

2问题的解决,不能只是为了改问题而改问题。分析是必须的,要找到出问题的根本原因,出这个原因是哪一部分负责,要去改那一部分。从根本上解决问题,就像出去痛片,治标不治本。到时候,受罪的是自己。

3重构,本为新手,没有什么资质去谈这个话题。但是还是想说说。重构的目的很多,这里做的重构,主要是去除重复,抽出模块,让别人容易看懂。以前写javascript的时候,直接想好怎么写。重构少,但是这次不同,没有接触过,直接上的,所以代码开始写的很差劲,不过还好,重构就会体现了它的作用。推荐本书吧,叫做《重构:改善既有代码的设计》相当不错的一本书,还有一本叫做《clean code》 。有空可以看看。

上一篇: Hashtable的使用方法介绍 下一篇: 没有下一篇了!
发表评论
用户名: 匿名