问题描述
最近,写App时遇到了一个奇怪的问题:博主的App中需要向服务器以GET方式发送网络请求,之前博主没怎么写过这方面的代码,为了方便调试,就建了一个Java工程,用的是较新版本4.3的HttpComponents,调试好后将代码复制到Android里时,出现了如下图所示的报错,并提示“The method setConfig(RequestConfig) is undefined for the type HttpGet”,说明HttpGet没有setConfig()这个方法
为什么博主说奇怪呢,因为在Java工程里用到的有关网络请求的类来自下图这7个包里的,博主虽不知道HttpGet来自哪个包,但可以肯定它也是其中某个包的类。把代码复制到Android工程之前,博主已经将这6个包import进工程里,同一个类在Android工程和Java工程里拥有的方法怎么会不一样呢
原因分析
博主偶然发现了问题的原因,就是当把Android里上述的7个包删掉后,复制过来的代码里有关网络请求的类(包括HttpGet)都没有报错,唯一报错的还是上述用到setConfig()方法的那行代码。这说明Android工程里,有关网络请求的类不是来自博主import进的7个包!博主在网上一搜,Android已经成功集成了HttpClient,所以开发人员在Android项目中可以直接使用HttpClient来想Web站点提交请求以及接受响应。
有人也遇到类似的问题http://bbs.byr.cn/#!article/MobileTerminalAT/11174,这个贴子里楼主说:Android SDK里自带了org.apache.http.client.methods.HttpGet这个类,HttpComponents4.3里也同样有org.apache.http.client.methods.HttpGet这个类,两个类的路径完全一样,但前者没有httpGet.setConfig()这个方法,而后者有。并且Android工程优先引用了Androi SDK里的类。
这就可以解释为什么同一个类在Android工程和Java工程里拥有的方法不一样,其实这个类来自不同的包,前者是Android SDK中的,后者是HttpComponents4.3里的。
解决办法
Java工程里通过HttpClient 4.3