Android网络编程之获取网络上的Json数据实例(2)
复制代码 代码如下: %@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"% ${json} 至此服务器端项目已经完成。下面开始创建Android端项目。 二、
复制代码 代码如下:
<%@ 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
收藏文章
精彩图集
精彩文章