Android端从服务器抓取的几种常见的数据的处理方式
jopen
11年前
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 } , {.....}]