Android网络编程之获取网络上的Json数据实例_Android

为要获取网络上的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 http://www.jb51.net/article/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运行效果图:

时间: 2024-09-09 22:04:30

Android网络编程之获取网络上的Json数据实例_Android的相关文章

Android网络编程之获取网络上的Json数据实例

为要获取网络上的Json所以需要服务器端提供的支持. 一.创建服务器端: 服务器端项目结构: 服务器端运行效果图: 第一步:创建业务所需的JavaBean 复制代码 代码如下:  package com.jph.sj.model;   import java.util.Date;   /**  * 新闻实体类  * @author jph  * Date:2014.09.26  */ public class News {     private Integer id;     private

Android访问php取回json数据实例_Android

php代码 复制代码 代码如下: $array = array( 'username'=>'杨铸', 'password'=>'123456', 'user_id'=>1 ); echo json_encode($array); java代码 复制代码 代码如下: private void startUrlCheck(String username,String password) { HttpClient client = new DefaultHttpClient(); String

Android中生成、使用Json数据实例_Android

1.Json的制作 复制代码 代码如下: package com.example.usingjson2;    import org.json.JSONException;  import org.json.JSONObject;    import android.os.Bundle;  import android.app.Activity;    public class MainActivity extends Activity {        @Override      prote

Android编程简单获取网络上的图片

本文实例讲述了Android编程简单获取网络上的图片的方法.分享给大家供大家参考,具体如下: 要获取网络上的图片,首先得有网络的访问权限,这个不再写了,以前的文章中写过,还有布局方式不再写了,就是写也是一个简单的布局,没有多大意义,直接上核心代码: 这是本人使用的一个简单的类,来获取网上的图片. public static Bitmap getImage(String Url) throws Exception { try { URL url = new URL(Url); String res

linux网络编程libpcap获取网络接口信息失败

问题描述 linux网络编程libpcap获取网络接口信息失败 #include typedef u_int32_t in_addr_t; struct in_addr{ in_addr_t s_addr;}; void main(){ char error_content[PCAP_ERRBUF_SIZE]; struct in_addr net_ip_address; struct in_addr net_mask_address; char *net_interface; char *ne

服务器-关于java网络编程中获取输入流中数据的问题?

问题描述 关于java网络编程中获取输入流中数据的问题? //服务器端接收消息的类.定制端口号为8888 serviceSocket = new ServerSocket(10000); //获取socket.这个方法是阻塞式的 socket = serviceSocket.accept(); inputStream = socket.getInputStream(); byte buf[] = new byte[1024]; int len = 0; len =inputStream.read

webkit-请问android中怎么对获取手机上正在运行的浏览器所打开网页的URL

问题描述 请问android中怎么对获取手机上正在运行的浏览器所打开网页的URL 具体需求为 对浏览器打开的网页地址进行监听.控制,当发现是有问题的网址时如何让浏览器停止对该网页的访问(比如关闭当前标签等) 主要问题就是怎么获取当前浏览器所请求的url,监听接口是什么?,求大神告知,不甚感激 解决方案 对浏览器这个不太实现吧,因为 Android 下用户可用的浏览器太多了. 还是通过对网络的监控,有可实现性. 解决方案二: 激活自己为VPN,然后过滤, 因为资料比较少,因此建议查Google的安

spring-java web 怎么读取网络上的JSON数据

问题描述 java web 怎么读取网络上的JSON数据 请问怎么java web应用怎么能在服务段获取一个特定网络上的JSON数据? 解决方案 参考:http://yq135314.iteye.com/blog/1546311 解决方案二: 发送http request,content type 用json就可以获取对应格式数据.

iOS网络编程之一——iOS网络框架简介

iOS网络编程之一--iOS网络框架简介 一.引言         通过网络,一款应用才能够内容丰富,才能够完成用户操作与后台数据的交互.网络编程是移动应用或游戏开发开发中不可缺少的技术.iOS原生的网络框架也十分完善,其中涉及到的许多类和协议用于处理网络开发中的各种需求 二.URL加载框架     iOS的URL加载系统包含许多类与协议,这些类和协议相互协作完成URL加载的信息配置,协议支持,身份验证,cookie和缓存等功能.APPLE开发文档中有如下图表示他们之间的关系:     关于UR