Android資料轉化為Json形式給用戶端及用戶端使用json資料

來源:互聯網
上載者:User

Android資料轉化為Json形式給用戶端及用戶端使用json資料

(1)首先建立產生未經處理資料的service,VideoNewsServiceBean,這是一個介面的實作類別,介面的功能如下:

public interface VideoNewsService {    /**     * 擷取最新的視頻資訊     * @return     */    public List getLastNews();}

News類

public class News {    private Integer id;    private String title;    private Integer timelength;    public News(Integer id, String title, Integer timelength) {        this.id = id;        this.title = title;        this.timelength = timelength;    }    //get/set方法}

介面的實作類別:產生一些假資料

public class VideoNewsServiceBean implements VideoNewsService {    public List getLastNews(){        List newes = new ArrayList();        newes.add(new News(90, "喜羊羊與灰太狼全集", 78));        newes.add(new News(10, "實拍艦載直升東海救援演習", 28));        newes.add(new News(56, "喀麥隆VS荷蘭", 70));        return newes;    }}

(2)通過servlet將資料返回給用戶端:ListServlet.java

public class ListServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    private VideoNewsService service = new VideoNewsServiceBean();    protected void doGet(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {        doPost(request, response);    }    protected void doPost(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {        List videos = service.getLastNews();            // [{id:56,title:"xxxxx",timelength:90},{id:16,title:"xbbx",timelength:20}]            StringBuilder builder = new StringBuilder();            //對資料進行追加為json格式            builder.append('[');            for (News news : videos) {                builder.append('{');                builder.append("id:").append(news.getId()).append(',');                builder.append("title:\"").append(news.getTitle())                        .append("\",");                builder.append("timelength:").append(news.getTimelength());                builder.append("},");            }            //刪除最後一個多的字元            builder.deleteCharAt(builder.length() - 1);            builder.append(']');            //將資料設定在request域中,進行跳轉,當用戶端請求該servlet的時候跳轉到該jsp頁面,實際請求的為jsp頁面            request.setAttribute("json", builder.toString());            request.getRequestDispatcher("/WEB-INF/page/jsonvideonews.jsp")                    .forward(request, response);    }}

(3)當用戶端通過servlet請求的時候就經過跳轉可以返回jsp頁面資料(使用的是el運算式,因為json資料為String類型所以 contentType=”text/plain; charset=UTF-8”)

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

(4)在用戶端取出資料
同樣的第一步仍是建立一個News的類,這裡省略
建立一個擷取Json的service,VideoNewsService.java

public class VideoNewsService {    /**     * 擷取最新的視頻資訊     * @return     * @throws Exception     */    public static List getJSONLastNews() throws Exception{        String path = "伺服器請求servlet的地址";        URL url = new URL(path);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        conn.setConnectTimeout(5000);        conn.setRequestMethod("GET");        if(conn.getResponseCode() == 200){            InputStream inStream = conn.getInputStream();            return parseJSON(inStream);        }        return null;    }    /**     * 解析JSON資料     * @param inStream     * @return     */    private static List parseJSON(InputStream inStream) throws Exception{        List newses = new ArrayList();        byte[] data = StreamTool.read(inStream);        String json = new String(data);        //因為資料是類似於數組的形式重複的使用JSONArray        JSONArray array = new JSONArray(json);        for(int i = 0 ; i < array.length() ; i++){            JSONObject jsonObject = array.getJSONObject(i);            News news = new News(jsonObject.getInt("id"), jsonObject.getString("title"), jsonObject.getInt("timelength"));            newses.add(news);        }        return newses;    }}

這裡邊使用了一個工具類StreamTool.java,將輸入資料流轉化為byte資料返回

public class StreamTool {    /**     * 讀取輸入資料流資料     */    public static byte[] read(InputStream inStream) throws Exception {        ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len = 0;        while ((len = inStream.read(buffer)) != -1) {            outStream.write(buffer, 0, len);        }        inStream.close();        return outStream.toByteArray();    }

然後皆可以在具體的介面中進行資料的使用:(這裡為一個listview設定值)
MainActivity.java

public class MainActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        ListView listView = (ListView) this.findViewById(R.id.listView);        try {            List videos = VideoNewsService.getJSONLastNews();//需修改成你原生Http請求路徑            //這裡使用的List>可以將資料放入hashmap之後再放入list集合中            List> data = new ArrayList>();            for(News news : videos){                HashMap item = new HashMap();                item.put("id", news.getId());                item.put("title", news.getTitle());                item.put("timelength", getResources().getString(R.string.timelength)                        + news.getTimelength()+ getResources().getString(R.string.min));                data.add(item);            }            //為listview設定適配器            SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,                    new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength});            listView.setAdapter(adapter);        } catch (Exception e) {            e.printStackTrace();        }    }}

到此json資料的產生客用戶端使用json資料操作已經完成!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.