android端从服务器抓取的几种常见的数据的处理方式
1、图片
public void look(View v) {
String path = et_path.getText().toString();
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
if(bitmap != null){
iv.setImageBitmap(bitmap);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
2、网页源码
public void look(View v) {
String path = et_path.getText().toString();
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
//把流转化成文本信息
while((len = is.read(buffer)) != -1){
bos.write(buffer,0,len);
}
String html = bos.toString();
html_tv.setText(html);
is.close();
bos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
3、Xml形式的数据
public List<HeaderNew> getHeaderNews(Context context) throws Exception{
String path = context.getResources().getString(R.string.serverurl);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
return parserHeaderNews(is);
}
return null;
}
public List<HeaderNew> parserHeaderNews(InputStream is) throws Exception {
List<HeaderNew> headerNews = null;
HeaderNew headerNew = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is,"UTF-8");
int eventType = parser.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_TAG:
if("HeaderNews".equals(parser.getName())){
headerNews = new ArrayList<HeaderNew>();
}else if("HeaderNew".equals(parser.getName())){
headerNew = new HeaderNew();
}else if("image".equals(parser.getName())){
headerNew.setImage(parser.nextText());
}else if("title".equals(parser.getName())){
headerNew.setTitle(parser.nextText());
}else if("content".equals(parser.getName())){
headerNew.setContent(parser.nextText());
}else if("count".equals(parser.getName())){
headerNew.setCount(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if("HeaderNew".equals(parser.getName())){
headerNews.add(headerNew);
headerNew = null;
}
break;
default:
break;
}
eventType = parser.next();
}
return headerNews;
}
4、抓取JSON格式的数据
抓取JSON格式的数据是以抓取网页源码为基础的。
public List<HeaderNew> getHeaderNewsFromJSON(Context context) throws Exception{
List<HeaderNew> headerNews = new ArrayList<HeaderNew>();
String path = context.getResources().getString(R.string.serverurl_json);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = is.read(buffer)) != -1){
bos.write(buffer,0,len);
}
String json = bos.toString();
JSONArray jsonArray = new JSONArray(json);
for(int i = 0 ; i < jsonArray.length() ; ++i){
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
HeaderNew headerNew = new HeaderNew();
headerNew.setImage(jsonObject.getString("image"));
headerNew.setTitle(jsonObject.getString("title"));
headerNew.setContent(jsonObject.getString("content"));
headerNew.setCount(jsonObject.getString("count"));
headerNews.add(headerNew);
}
}
return headerNews;
}
5、抓取Xml形式的数据与抓取JSON形式的数据的区别
构建时的区别:
1)Xml形式的数据
服务器端直接返回数据集合,由JSP来构建XML形式的数据
代码如下:
servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { HeaderNewsService service = new HeaderNewsService();
List<HeaderNew> headerNews = service.getHeaderNews(); request.setAttribute("headerNews", headerNews);
request.getRequestDispatcher("/WEB-INF/page/headernewsxml1.jsp").forward(request, response);
}
jsp:
<?xml version="1.0" encoding="UTF-8"?>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html; charset=utf-8" %>
<HeaderNews>
<c:forEach items="${headerNews}" var="headerNew">
<HeaderNew>
<image>${headerNew.image }</image>
<title>${headerNew.title }</title>
<content>${headerNew.content}</content>
<count>${headerNew.count}</count>
</HeaderNew>
</c:forEach>
</HeaderNews>
2)JSON形式的数据
在服务器端构造好JSON格式的数据。JSP页面直接显示即可。
代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { HeaderNewsService service = new HeaderNewsService();
List<HeaderNew> headerNews = service.getHeaderNews();
StringBuilder sb = new StringBuilder("["); for(HeaderNew headerNew : headerNews){
sb.append("{");
sb.append("image:").append("\"").append(headerNew.getImage()).append("\"").append(",");
sb.append("title:").append("\"").append(headerNew.getTitle()).append("\"").append(",");
sb.append("content:").append("\"").append(headerNew.getContent()).append("\"").append(",");
sb.append("count:").append("\"").append(headerNew.getCount()).append("\"");
sb.append("}");
sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]"); String json = sb.toString();
request.setAttribute("json",json);
request.getRequestDispatcher("/WEB-INF/page/headernewsjson.jsp").forward(request,response);
}
JSP:
<%@ page contentType="text/html; charset=UTF-8" %>
${json}
附上JSON数据的格式:
[{ a : b , c : d } , {.....}]
android端从服务器抓取的几种常见的数据的处理方式的更多相关文章
- android端向服务器提交请求的几种方式
1.GET方式 其实GET方式说白了,就是拼接字符串..最后拼成的字符串的格式是: path ? username= ....& password= ...... public boolea ...
- [python]初试页面抓取——抓取沪深股市交易龙虎榜数据
[python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import ...
- 抓取“矢量”的实时交通流量数据
1. 引言 最近老师有一个需求,就是想要抓取实时的矢量交通流量数据来做分析,类似于百度地图,高德地图的"实时路况"那种.平时的网络抓取工作一般是抓取网页上现成的数据,但是交通流量数 ...
- Java服务器对外提供接口以及Android端向服务器请求数据
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...
- Android 7.0解决抓取不到https请求的问题
问题:Android7.0系统,使用fiddler不能抓取https请求 解决方法: 1.在源码res目录下新建xml目录,增加network_security_config.xml文件 (工程名/ ...
- Android移动网络如何抓取数据包
1)下载tcpdump工具 tcpdump(dump the traffic on a network)是Linux中强大的网络数据采集分析工具之一,可以将网络中传送的数据包头完全截获下来提供分析.它 ...
- Android MaoZhuaWeiBo开发Service抓取个人信息-2
前面把基本的东西讲完了,之后就是数据的获取和解析显示出来了,那接下来我们就负责抓取数据的这块吧,首先我们须要 在清单文件中载入服务和活动 加入:. <activity android:name= ...
- Charles安装破解、抓取https请求及常见问题解决方法
现在基本大部分网站都使用了https,所以要想抓到https的请求,首要任务是先有工具:charles.fiddler,先介绍下charles针对https请求的抓取方法,此方法兼容windows和m ...
- 如何抓取基于https协议的webservice数据包
方法一:基于Fiddler2等第三方工具(需要在Java端禁用SSL安全检查) 原文拷贝自http://blog.csdn.net/zmxj/article/details/6327775,向原作者表 ...
随机推荐
- Week5(10月11日):国庆后补课的复杂心情
Part I:提问 =========================== 1.说说你所知道的强类型视图HTML扩展方法. 2.请解释代码. @Html.ActionLink("链接文字& ...
- Hadoop实战实例
Hadoop实战实例 Hadoop实战实例 Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布 ...
- Qt状态机框架
The State Machine Framework 状态机框架提供了用于创建和执行状态图的类.概念和符号是基于Harel的Statecharts: A visual formalism for c ...
- android handler looper thread
在线程中调用包含创建handler方法的时候,会报错,提示: “need call Looper.prepare()” -- 在创建之前,调用Looper.prepare()方法来创建一个looper ...
- 转:git windows中文 乱码问题解决汇总
it的Windows版本Msysgit对中文的支持不够好 .当使用时,会出现以下三种情况的中文乱码: 下面的几个文件都在git安装目录下文件夹etc内.1.ls不能显示中文目录 解决办法:在git/g ...
- win7系统远程连接其它计算机,并且向远程机传输文件
首先,打开开始菜单,在程序自带的 “附件“ 中找到 "远程桌面连接"并打开,出现远程桌面对话框: 其次,在对话框左下角点击“选项”,选择“本地资源对话框”,在本地设备和资源下点击“ ...
- 一步一步重写 CodeIgniter 框架 -- 原因和思路
CodeIgniter 是一个非常轻量级的 PHP 框架,说是轻量级,最新版的代码只有不到2M. 其最重要的特点就是 MVC 模式来编写代码,如果大家看过一些用 PHP 来编写网站的书籍或教程,无一例 ...
- mysql双机热备的配置步骤
设置双机热备: 首先要在两台机器上建立同步用户: grant replication slave on *.* to 'repdcs'@'192.168.21.39' identified by '1 ...
- jstl标签经典
1. <c:out> 库 :Core(核心库) URI : http://java.sun.com/jsp/jstl/core 前缀 : c 描述 :<c:out> 标签是一个 ...
- 菜单组件——axure线框图部件库介绍
软件类的教程,我写不出长篇大论,这里面的都是基础的操作,希望初学者,根据一个功能演示,可以自己测试其他功能菜单的效果! Axure自带的菜单组件,我几乎没有用到过,做菜单导航,我第一时间想到的还是矩形 ...