最近做了个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》 。有空可以看看。
相关推荐
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
IllegalStateException: The specified child already has a parent.我的博客中有文章讲解
异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract ...
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but...
标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...
解决java.lang.IllegalStateException: unread block data的架包
这个存储库提供了一种在处理片段传输和后台任务时避免“java.lang.IllegalStateException:Can not perform this action after onSaveInstanceState”的方法。 您可以在的非常权威的阅读有关该问题和可能的解决方案...
1. java.lang.IllegalStateException: No wrapped connection. 2.java.lang.IllegalStateException: Adapter is detached. 原因: 1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...
《Spring框架:开启Java开发新纪元》 Spring框架,由Rod Johnson创立并由Interface21公司推广,自诞生以来,它就致力于简化Java企业级应用(J2EE)的开发,提供了一种非侵入式的解决方案,极大地提高了开发效率。...
3. **错误处理机制**:在实际开发过程中,对可能出现的错误进行妥善处理是非常重要的。例如,如果未能成功连接到 Excel,应该及时向用户反馈错误信息并退出程序。 4. **文件操作**:PowerBuilder 提供了一系列用于...
在Java开发中,Web服务(Web Service)是一种标准的接口,允许不同系统之间进行通信,而XFire是早年流行的一款用于构建和消费Web服务的开源框架。它使用SOAP(简单对象访问协议)和XML(可扩展标记语言)作为基础,...
Java是一种高级编程语言,通常用于开发跨平台的应用程序。然而,有时我们可能需要在Java程序中调用操作系统底层的动态链接库(DLLs on Windows,SOs on Linux,dylibs on macOS),以便利用C、C++等语言编写的高性能...
### 面向对象编程与Objective-C:苹果iOS开发者指南 #### 一、概述 面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于软件开发中的编程范式,它将程序设计围绕“对象”进行组织。...
- 在使用Jacob后,确保调用`ComThread.Release()`释放资源。 - Jacob并不支持所有的COM接口,有些复杂或特定的COM组件可能无法正常工作。 - 由于Jacob依赖于本地DLL,所以它不适用于跨平台的应用。 通过以上的介绍...
异常机制的主要作用是在程序执行过程中出现问题时,能够提供一种有序的方式让程序处理这些异常情况。当出现异常时,程序会停止当前的执行路径,将控制权转移给异常处理器。这种方式确保了即使程序出现错误也能安全地...
WebSocket是Web交互的一种实时通信协议,它允许服务器与客户端之间进行双向通信,即服务器不仅可以响应客户端的请求,还可以主动向客户端推送数据。在Java中,有两种常见的方式实现WebSocket:使用Tomcat内置的...
4. **测试连接**:在Tomcat完全启动后,尝试使用管理工具或编程方式连接数据库,验证连接是否成功。 通过以上步骤,可以有效地解决Tomcat启动时出现的与MySQL JDBC驱动相关的错误。此外,在进行SSH框架整合时,还...
8. **图纸状态**:“DWG STATUS”表示图纸的当前状态,如草图、修订版、最终版等,变更后需要更新此状态以反映最新的设计状态。 综上所述,尽管GD&T没有变化,但其他设计参数的变更可能仍然要求更新图纸,以确保...