《第一行代码》第十章-Pull解析方式
来源:互联网 发布:linux maven 打包war 编辑:程序博客网 时间:2024/06/06 10:17
起因是自己在实际操作的过程中在这一节卡住了,因为此书是2014年的,有些地方难免与现在有些不一样。而这些正好能祛除我的浮躁。
工具:Android Studio 2.2.2
网络上传输数据时最常用的格式有两种:XML和JSON,所以学习XML的解析是很有必要的。
解析XML有三种方式:PULL、SAX和DOM,书中只讲了前两种。本文以第一种为例。
新建名为get_data.xml文件。
<apps> <app> <id>1</id> <name>google maps</name> <version>2.1</version> </app> <app> <id>3</id> <name>google play</name> <version>2.3</version> </app></apps>
在写sendRequestWithHttpClient方法时,会出现根本没有HttpClient类。
查了资料才知道:
HttpClient会在谷歌的安卓中消失的原因
一开始,谷歌安卓新出,库中自带HttpClient 4.0 测试预览版。为与安卓保持API同步,HTTPClient不敢打动干戈。后来,HTTPCient 4.0逐渐成熟,Apache欲使Android跟进更新对应的库,Android拒绝了。然而旧库bug丛生,瑕疵遍地。故,今Apache新出一个HTTPClient for android。
那既然Android自带的不好,为啥不直接导入Apache的呢?因为包名是一样的,库冲突。不是不能解决,也能,据说比较麻烦(笔者没试过)。从Apache下载最新的httpclient源码,把每个源文件包名改了,改成Android不冲突的。然后打包成jar文件,然后导入到Android工程的lib里。
现在,Android 6.0 已经移除了httpClient,于是我们可以从Apache下载HttpClient,然后导入到lib中,不用改名了。
解决办法:
1.eclipse
libs中加入 org.apache.http.legacy.jar
上面的jar包在:**\android-sdk-windows\platforms\android-23\optional下(需要下载android 6.0的SDK)2.android studio:
在相应的,module下的build.gradle中加入:
android{
useLibrary ‘org.apache.http.legacy’
}
在加入jar包的时候又出现了幺蛾子,因为对Android Studio还不是很熟悉,当把jar放进libs目录,发现在项目的project列表里面没有libs目录。
原来目录结构是可以切换的,之前切换过,又忘了。
private void sendRequestWithHttpClient(){ new Thread(new Runnable() { @Override public void run() { try{ HttpClient httpClient = new DefaultHttpClient(); //www.suqin.wang是我的个人网站,我把XML文件上传到网站了,大家可以使用,因为不是很明白书上是怎么设置IP的。 HttpGet httpGet = new HttpGet("http://www.suqin.wang/get_data.xml"); HttpResponse httpResponse = httpClient.execute(httpGet); if(httpResponse.getStatusLine().getStatusCode() == 200){ HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity,"utf-8"); parseXMLWithPull(response); } }catch (Exception e){ e.printStackTrace(); } } }).start();}
本来以为可以在logcat看到结果了,发现鬼的结果都没有。只有报错:android上java.net.UnknownHostException: Unable to resolve host “xxxx”: No address associated wit。
咋办?凉拌。
这是由于我们在开发的过程中没有给模拟器和Manifest开放网络导致的,
解决方法目前有两种:
1、android设备网络连接没打开,例如3G网络和WIFI网络
2、Manifest文件没有标明网络访问权限
最后检查的结果是又忘记开WIFI了,而见鬼的路由器经常断线,我开了WIFI,没有自动连接。真机测试,没联网玩个鬼。
打完,收工。
编程,还是要静下心来。
- 《第一行代码》第十章-Pull解析方式
- 《第一行代码》读书笔记 (第十章至第十三章)
- 第一行代码笔记,第十章------网络的世界
- 第一行代码总结:10网络:10.3.2 SAX解析方式
- 第一行代码-10.3 解析XML数据格式
- 第一行代码 第三章
- Pull解析Xml方式
- PULL方式解析xml
- xml解析--Pull方式
- Pull解析方式
- pull方式解析xml
- Pull解析方式
- 第一行代码 读书笔记 第1章
- 第一行代码 读书笔记 第2章
- 读书笔记 《第一行代码》 第13章
- 第 1 章,第一行代码
- 《第一行代码》第 1 章
- [置顶]xml文件解析方式详解、 pull方式解析xml文件实现代码
- 购物车实现
- Struts2体系结构与基本流程
- 计算机中的负数
- 在centos nginx 环境下 搭建 letsencrypt
- Leetcode Insertion Sort List
- 《第一行代码》第十章-Pull解析方式
- Tomcat热部署的实现原理
- Unity Editor 编辑器扩展 十 Handle控件
- 写了一天写出个这玩意 好为难啊白瞎学了一个月
- ISD9160学习笔记08_结项总结
- Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题
- SpringMVC的工作原理
- 关于java下载excel,pdf等demo
- android逆向基础的几个步骤