亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android網絡編程之獲取網絡上的Json數據實例

2020-04-11 11:43:37
字體:
來源:轉載
供稿:網友

為要獲取網絡上的Json所以需要服務器端提供的支持。

一、創建服務器端:

服務器端項目結構:

服務器端運行效果圖:

第一步:創建業務所需的JavaBean

復制代碼 代碼如下:

 package com.jph.sj.model;
 
import java.util.Date;
 
/**
 * 新聞實體類
 * @author jph
 * Date:2014.09.26
 */
public class News {
    private Integer id;
    private String title;
    private Date publishDate;
    
    public News(Integer id, String title, Date publishDate) {
        this.id = id;
        this.title = title;
        this.publishDate = publishDate;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Date getPublishDate() {
        return publishDate;
    }
    public void setPublishDate(Date publishDate) {
        this.publishDate = publishDate;
    }
}

第二步:創建業務邏輯接口和具體實現類

業務接口:

復制代碼 代碼如下:

package com.jph.sj.service;
 
import java.util.List;
 
import com.jph.sj.model.News;
 
 
public interface NewsService {
 
    /**
     * 獲取最新的資訊
     * @return
     */
    public List<News> getLastNews();
 
}

業務接口的實現類:

復制代碼 代碼如下:

  package com.jph.sj.service.impl;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import com.jph.sj.model.News;
import com.jph.sj.service.NewsService;
 
public class NewsServiceBean implements NewsService {
    /**
     * 獲取最新的視頻資訊
     * @return
     */
    public List<News> getLastNews(){      
        List<News> newes = new ArrayList<News>();
        newes.add(new News(1, "李白", new Date(System.currentTimeMillis())));
        newes.add(new News(2, "杜甫", new Date(System.currentTimeMillis()+8200)));
        newes.add(new News(3, "賈寶玉",new Date(System.currentTimeMillis()-6000)));
        return newes;
    }
}

第三步:創建控制器Servlet

復制代碼 代碼如下:

 package com.jph.sj.servlet;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.jph.sj.model.News;
import com.jph.sj.service.NewsService;
import com.jph.sj.service.impl.NewsServiceBean;
 
 
/**
 * 負責響應客戶端的請求:http://xxx/NewsListServlet/NewsListServlet
 */
public class NewsListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private NewsService newsService = new NewsServiceBean();
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<News> newes = newsService.getLastNews();//獲取最新的視頻資訊
            //[{id:20,title:"xxx",timelength:90},{id:10,title:"xbx",timelength:20}]
            StringBuilder sbJson = new StringBuilder();
            //將list集合封裝成Json格式的字符串
            sbJson.append('[');
            for(News news : newes){
                sbJson.append('{');
                sbJson.append("id:").append(news.getId()).append(",");
                sbJson.append("title:/"").append(news.getTitle()).append("/",");
                sbJson.append("publishDate:").append(news.getPublishDate().getTime());
                sbJson.append("},");
            }
            sbJson.deleteCharAt(sbJson.length() - 1);//刪除字符串末尾的逗號
            sbJson.append(']');
            request.setAttribute("json", sbJson.toString());
            request.getRequestDispatcher("/WEB-INF/page/jsonnewslist.jsp").forward(request, response);
    }
}

第四步:創建jsonnewslist.jsp頁面

復制代碼 代碼如下:

<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>
${json}

至此服務器端項目已經完成。下面開始創建Android端項目。

二、創建Android端:

Android端項目結構:

第一步:創建業務所需的JavaBean

提示:因為服務器端和Android端項目都是用Java語言實現的,所以一些組件可以共用,JavaBean便是其中之一。此時我們在搭建Android端項目的時候,完全可以將服務器端項目中JavaBean拿來用。

第二步:創建Android端項目的業務邏輯層

核心代碼:GetAndParseJson:

復制代碼 代碼如下:

  package com.jph.gj.service;
 
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.jph.model.News;
import android.os.Handler;
import android.os.Message;
 
/**
 * 獲取并解析網絡上的Json
 * @author jph
 * Date:2014.09.26
 */
public class GetAndParseJson {
    private String url="http://10.219.61.117:8080/ServerForJSON/NewsListServlet"; 
    public static final int PARSESUCCWSS=0x2001;
    private Handler handler;
    public GetAndParseJson(Handler handler) {
        // TODO Auto-generated constructor stub
        this.handler=handler;
    }
    /**
     * 獲取網絡上的XML
     */
    public void getJsonFromInternet () {
        new Thread(new Runnable() {       
            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    HttpURLConnection conn=(HttpURLConnection) new URL(url).openConnection();
                    conn.setConnectTimeout(5000);
                    conn.setRequestMethod("GET");
                    if (conn.getResponseCode()==200) {
                        InputStream inputStream=conn.getInputStream();                    
                        List<News>listNews=parseJson(inputStream);
                        if (listNews.size()>0) {
                            Message msg=new Message();
                            msg.what=PARSESUCCWSS;//通知UI線程Json解析完成
                            msg.obj=listNews;//將解析出的數據傳遞給UI線程
                            handler.sendMessage(msg);
                        }
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }             
            }
        }).start();
        
    }
    /**
     * 解析json格式的輸入流轉換成List
     * @param inputStream
     * @return List
     */
    protected List<News> parseJson(InputStream inputStream) {
        // TODO Auto-generated method stub
        List<News>listNews=new ArrayList<News>();
        byte[]jsonBytes=convertIsToByteArray(inputStream);
        String json=new String(jsonBytes);
        try {
            JSONArray jsonArray=new JSONArray(json);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jObject=jsonArray.getJSONObject(i);
                int id=jObject.getInt("id");
                String title=jObject.getString("title");          
                long time=jObject.getLong("publishDate");
                News news=new News(id, title, new Date(time));
                listNews.add(news);
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return listNews;
    }
    /**
     * 將輸入流轉化成ByteArray
     * @param inputStream
     * @return ByteArray
     */
    private byte[] convertIsToByteArray(InputStream inputStream) {
        // TODO Auto-generated method stub    
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        byte buffer[]=new byte[1024];
        int length=0;
        try {
            while ((length=inputStream.read(buffer))!=-1) {
                baos.write(buffer, 0, length);            
            }
            inputStream.close();
            baos.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return baos.toByteArray();
    }
}

第三步:創建Activity

復制代碼 代碼如下:

package com.jph.gj.activity;
 
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jph.gj.R;
import com.jph.gj.service.GetAndParseJson;
import com.jph.model.News;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.widget.ListView;
import android.widget.SimpleAdapter;
 
/**
 * 獲取網絡上的Json
 * @author jph
 * Date:2014.09.26
 */
public class MainActivity extends Activity {
    private List<News>listNews;
    private ListView list;
    Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            switch (msg.what) {
            case GetAndParseJson.PARSESUCCWSS:
                listNews=(List<News>) msg.obj;
                initData();
                break;        
            }
            super.handleMessage(msg);
        }     
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list=(ListView)findViewById(R.id.list);
        GetAndParseJson getAndParseJson=new GetAndParseJson(mHandler);
        getAndParseJson.getJsonFromInternet();
    }
    /**
     * 將解析后的xml填充到ListView
     */
    protected void initData() {
        // TODO Auto-generated method stub
        List<Map<String, Object>>items=new ArrayList<Map<String,Object>>();
        for (News news:listNews) {
            Map<String, Object>item=new HashMap<String, Object>();
            item.put("id", news.getId());
            item.put("title", news.getTitle());
            item.put("time", convertDate(news.getPublishDate()));
            items.add(item);
        }
        SimpleAdapter adapter=new SimpleAdapter(this, items, R.layout.line, new String[]
                {"id","title","time"}, new int[]{R.id.tvId,R.id.tvTitle,R.id.tvTime});
        list.setAdapter(adapter);
    }
    private String convertDate(Date publishDate) {
        // TODO Auto-generated method stub
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");     
        return sdf.format(publishDate);
    }
}

至此Android端項目已經完成了。下面就讓我們看一下APP運行效果吧:
Android運行效果圖:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩在线观看视频小说| 成人免费视频在线观看超级碰| 日韩在线视频观看正片免费网站| 国产精品久久久久久五月尺| 成人午夜在线影院| 国产成人鲁鲁免费视频a| 欧美乱大交xxxxx| 国产精品自产拍在线观| 久久精品亚洲热| 91最新在线免费观看| 国产精品久久久久福利| 日韩影视在线观看| 亚洲理论片在线观看| 精品一区二区三区四区在线| 日韩av三级在线观看| 久久影视三级福利片| 91久久在线观看| 国产精品男人的天堂| 亚洲欧美在线一区| 欧美黑人一级爽快片淫片高清| 久久五月天色综合| 久久久久久久一区二区| 久久香蕉国产线看观看网| 91九色视频在线| 久久91精品国产| 51ⅴ精品国产91久久久久久| 国产精品在线看| 国产精品视频自在线| 欧美猛男性生活免费| 国产精品一区二区三区久久| 精品无码久久久久久国产| 亚洲影院色在线观看免费| 亚洲欧美日韩第一区| 国产精品视频男人的天堂| 日本成人黄色片| 亚洲综合大片69999| 精品女厕一区二区三区| 91九色综合久久| 国产精品视频地址| 日韩av电影在线播放| 国产剧情久久久久久| 久久久免费精品视频| 国产精品xxx视频| 一区二区中文字幕| 久久久久国产一区二区三区| 1769国内精品视频在线播放| 亚洲自拍中文字幕| 91高清免费在线观看| 亚洲系列中文字幕| 国产精品爽爽爽| 中文字幕无线精品亚洲乱码一区| 国产精品高潮呻吟视频| 亚洲免费视频一区二区| 国产成人精品视频在线| 亚洲最新在线视频| 97久久精品视频| 中文字幕日韩欧美| 久久久久久久久久久免费精品| 国产精品久久在线观看| 欧美激情免费在线| 国产婷婷97碰碰久久人人蜜臀| 91久久久久久久一区二区| 中文字幕精品久久| 国产香蕉一区二区三区在线视频| 精品国产乱码久久久久酒店| 亚洲自拍偷拍在线| 91九色国产视频| 亚洲精品第一国产综合精品| 欧美日韩亚洲91| 91久久久久久久一区二区| www.亚洲成人| 成人网在线观看| 97精品久久久中文字幕免费| 国产精品久久久久久一区二区| 深夜福利一区二区| 97国产成人精品视频| 久久精品成人欧美大片| 亚洲美女福利视频网站| 51久久精品夜色国产麻豆| 久久九九全国免费精品观看| 青青久久aⅴ北条麻妃| 国产精品永久免费视频| 久久久久久国产精品| 一区二区三区 在线观看视| 欧美日韩精品在线| 亚洲综合精品伊人久久| 国产精品海角社区在线观看| 77777亚洲午夜久久多人| 色播久久人人爽人人爽人人片视av| 精品国产一区二区三区四区在线观看| 欧美日韩国产丝袜美女| 欧美精品久久久久| 国产在线视频2019最新视频| 欧美限制级电影在线观看| 久久69精品久久久久久国产越南| 日韩av黄色在线观看| 97碰在线观看| 欧亚精品在线观看| 亚洲电影免费观看高清完整版在线观看| 日韩精品一二三四区| 久久躁狠狠躁夜夜爽| www.国产一区| 亚洲级视频在线观看免费1级| 中文字幕亚洲自拍| 欧美精品九九久久| 国产成人精品免费视频| 午夜伦理精品一区| 国产久一一精品| 欧美日韩另类在线| 日韩精品极品在线观看播放免费视频| 高清在线视频日韩欧美| 国产精品狼人色视频一区| 91久久精品国产91性色| 日韩精品视频在线免费观看| 亚洲经典中文字幕| www.日韩免费| 亚洲精品国产电影| 国产免费成人av| 日韩美女免费线视频| 日韩欧美国产网站| 在线播放精品一区二区三区| 97国产精品免费视频| 亚洲欧洲国产精品| 欧美一区二区三区四区在线| 国产精品精品一区二区三区午夜版| 国产精品日韩专区| 亚洲二区中文字幕| 国产男女猛烈无遮挡91| 国产欧美精品一区二区三区介绍| 亚洲激情视频网站| 亚洲精品乱码久久久久久按摩观| 九九热精品视频在线播放| 欧美精品久久久久a| 日韩有码在线视频| 欧美中文在线观看| 国产一区二区日韩精品欧美精品| 91免费电影网站| 精品欧美激情精品一区| 日韩成人中文字幕| 日本不卡视频在线播放| 久久99久国产精品黄毛片入口| 这里只有精品视频| 久久夜色精品亚洲噜噜国产mv| 国产精品高潮呻吟视频| 亚洲高清免费观看高清完整版| www.亚洲成人| 在线亚洲国产精品网| 在线视频亚洲欧美| 久久精品影视伊人网| 亚洲一区亚洲二区| 国语自产精品视频在线看一大j8| 亚洲香蕉伊综合在人在线视看| 韩国美女主播一区| 日日骚久久av| 一区二区三区精品99久久| 日韩中文视频免费在线观看| 97视频在线播放| 中文字幕av一区| 亚洲女人天堂成人av在线| 亚洲丝袜在线视频| 国内免费精品永久在线视频| 91精品国产91久久久久久最新| 草民午夜欧美限制a级福利片| 午夜精品一区二区三区在线视|