最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實例

 更新時間:2014年10月10日 10:07:56   投稿:junjie  
這篇文章主要介紹了Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實例,本文用完整的代碼實例講解了在Android中讀取網(wǎng)絡(luò)中Json數(shù)據(jù)的方法,需要的朋友可以參考下

為要獲取網(wǎng)絡(luò)上的Json所以需要服務(wù)器端提供的支持。

一、創(chuàng)建服務(wù)器端:

服務(wù)器端項目結(jié)構(gòu):

服務(wù)器端運行效果圖:

第一步:創(chuàng)建業(yè)務(wù)所需的JavaBean

復(fù)制代碼 代碼如下:

 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;
    }
}

第二步:創(chuàng)建業(yè)務(wù)邏輯接口和具體實現(xiàn)類

業(yè)務(wù)接口:

復(fù)制代碼 代碼如下:

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

業(yè)務(wù)接口的實現(xiàn)類:

復(fù)制代碼 代碼如下:

  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;
    }
}

第三步:創(chuàng)建控制器Servlet

復(fù)制代碼 代碼如下:

 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;
 
 
/**
 * 負責(zé)響應(yīng)客戶端的請求: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);
    }
}

第四步:創(chuàng)建jsonnewslist.jsp頁面

復(fù)制代碼 代碼如下:

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

至此服務(wù)器端項目已經(jīng)完成。下面開始創(chuàng)建Android端項目。

二、創(chuàng)建Android端:

Android端項目結(jié)構(gòu):

第一步:創(chuàng)建業(yè)務(wù)所需的JavaBean

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

第二步:創(chuàng)建Android端項目的業(yè)務(wù)邏輯層

核心代碼:GetAndParseJson:

復(fù)制代碼 代碼如下:

  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;
 
/**
 * 獲取并解析網(wǎng)絡(luò)上的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;
    }
    /**
     * 獲取網(wǎng)絡(luò)上的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;//將解析出的數(shù)據(jù)傳遞給UI線程
                            handler.sendMessage(msg);
                        }
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }             
            }
        }).start();
        
    }
    /**
     * 解析json格式的輸入流轉(zhuǎn)換成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;
    }
    /**
     * 將輸入流轉(zhuǎn)化成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();
    }
}

第三步:創(chuàng)建Activity

復(fù)制代碼 代碼如下:

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;
 
/**
 * 獲取網(wǎng)絡(luò)上的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端項目已經(jīng)完成了。下面就讓我們看一下APP運行效果吧:
Android運行效果圖:

相關(guān)文章

  • Android編程實現(xiàn)對電池狀態(tài)的監(jiān)視功能示例

    Android編程實現(xiàn)對電池狀態(tài)的監(jiān)視功能示例

    這篇文章主要介紹了Android編程實現(xiàn)對電池狀態(tài)的監(jiān)視功能,涉及Android基于廣播實現(xiàn)針對電源電量的判定與監(jiān)視技巧,需要的朋友可以參考下
    2016-11-11
  • Android 實現(xiàn)手機撥打電話的功能

    Android 實現(xiàn)手機撥打電話的功能

    本篇文章主要介紹 Android 開發(fā)手機撥打電話的功能,這里提供示例代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • Android?JetPack組件的支持庫Databinding詳解

    Android?JetPack組件的支持庫Databinding詳解

    DataBinding是Google發(fā)布的一個數(shù)據(jù)綁定框架,它能夠讓開發(fā)者減少重復(fù)性非常高的代碼,如findViewById這樣的操作。其核心優(yōu)勢是解決了數(shù)據(jù)分解映射到各個view的問題,在MVVM框架中,實現(xiàn)的View和Viewmode的雙向數(shù)據(jù)綁定
    2022-08-08
  • android實現(xiàn)可以滑動的平滑曲線圖

    android實現(xiàn)可以滑動的平滑曲線圖

    這篇文章主要為大家詳細介紹了android實現(xiàn)可以滑動的平滑曲線圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 源碼解析Android Jetpack組件之ViewModel的使用

    源碼解析Android Jetpack組件之ViewModel的使用

    Jetpack 是一個豐富的組件庫,它的組件庫按類別分為 4 類,分別是架構(gòu)(Architecture)、界面(UI)、 行為(behavior)和基礎(chǔ)(foundation)。本文將從源碼和大家講講Jetpack組件中ViewModel的使用
    2023-04-04
  • Android檢測Cursor泄漏的原理以及使用方法

    Android檢測Cursor泄漏的原理以及使用方法

    本文介紹如何在 Android 檢測 Cursor 泄漏的原理以及使用方法,還指出幾種常見的出錯示例,同時該方法同樣適合于其他需要檢測資源泄露的情況,感興趣的朋友可以了解下
    2013-01-01
  • Flutter應(yīng)用框架運行微信小程序方法

    Flutter應(yīng)用框架運行微信小程序方法

    這篇文章主要介紹了在Flutter?App內(nèi)運行微信小程序的過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Android列表對話框用法實例分析

    Android列表對話框用法實例分析

    這篇文章主要介紹了Android列表對話框用法,實例分析了Android實現(xiàn)列表對話框的布局、設(shè)置及功能等相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android編程實現(xiàn)自定義漸變顏色效果詳解

    Android編程實現(xiàn)自定義漸變顏色效果詳解

    這篇文章主要介紹了Android編程實現(xiàn)自定義漸變顏色效果,結(jié)合具體實例形式分析了Android基于xml及代碼定義來實現(xiàn)顏色漸變的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2017-08-08
  • Android圖文居中顯示控件使用方法詳解

    Android圖文居中顯示控件使用方法詳解

    這篇文章主要為大家詳細介紹了Android圖文居中顯示控件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09

最新評論

从江县| 岳西县| 宜春市| 阿坝县| 海安县| 大足县| 社旗县| 高要市| 柘城县| 若尔盖县| 北票市| 宁津县| 余庆县| 白水县| 偃师市| 贺州市| 永川市| 青神县| 志丹县| 壶关县| 兴海县| 馆陶县| 和田县| 北碚区| 沭阳县| 台南县| 凭祥市| 图们市| 华阴市| 兰考县| 甘孜| 田林县| 额尔古纳市| 祥云县| 庆阳市| 盐津县| 邹城市| 邯郸市| 萨嘎县| 潜山县| 浦北县|