Android端從服務器抓取的幾種常見的數據的處理方式

jopen 11年前發布 | 30K 次閱讀 Android 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 }  , {.....}]


 

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!