在Android项目中跟后台交互式不可分离的,所以我们经常要实现客户端与后台之间进行信息交互,传统的利用xml对于当前中国的网络服务较为不便,因此json更适合我们实战使用。
(1)本地传送例子;Json在传数据的时候,它所传送的数据是Object对象,所以这方便了我们对数据的传送!
import com.alibaba.fastjson.JSON;
public class MyJson {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] hello ={"ss","dd"};
String json = JSON.toJSONString(hello);
System.out.print(json);
}
}
下面我将用一个简单的例子实现利用json来实现网络传输数据:
在附上代码之前我们要先熟悉网络编程的几种方式:Socket、ServerSocket、URL、HTTP、web Service、WebView几种网络编程。
首先介绍通过URL进行网络编程。它所针对的是:
HTTP进行网络编程。它所针对的是:
服务器端:
在此我封装了一个类,对此进行描述:
package com.panda.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import android.util.Log;
import com.alibaba.fastjson.JSON;
public class DataBridge {
/**
* 请求指定地址,并将返回的数据返回为一个指定类型的集合
* @param action
* @param params
* @param clzz
* @return
* @throws Exception
*/
public static List executeToList(String action,Map<String,String> params,Class clzz) throws Exception{
action = Constant.basePath+File.separator+action;
String result = postConnection(action, params);
List list = JSON.parseArray(result, clzz);
return list;
}
/**
* 请求指定地址,并将返回的数据返回为一个指定类型的javabean对象9
* @param action 访问的url
* @param params 参数
* @param clzz 数据类型
* @return
* @throws Exception
*/
public static Object executeToObject(String action,Map<String,String> params,Class clzz) throws Exception{
action = Constant.basePath+File.separator+action;
String result = postConnection(action, params);
Object o =JSON.parseObject(result, clzz);
return o;
}
/**
* 请求指定定制,并返回字符串
* @param action
* @param params
* @return
* @throws Exception
*/
public static String executeToString(String action,Map<String,String> params) throws Exception{
action = Constant.basePath+File.separator+action;
String result = postConnection(action, params);
return result;
}
/**
* 根据URL得到输入流
* @param urlStr
* @return
*/
public static InputStream getInputStreamFromURL(String urlStr) {
HttpURLConnection urlConn = null;
InputStream inputStream = null;
try {
URL url = new URL(urlStr);
urlConn = (HttpURLConnection)url.openConnection();
inputStream = urlConn.getInputStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
/**
* 使用http请求数据
* @throws Exception
*/
private static String postConnection(String action,Map<String,String> params) throws Exception {
Log.v("test", "postConnection....");
//1.建立一个支持Http协议的客户端对象
HttpClient hc = new DefaultHttpClient();
//2.建立一个post请求或者get请求
HttpPost hp = new HttpPost(action);
List<NameValuePair> nvps = null;
if(params != null){//有参数
//3.设置要提交的数据
nvps = new ArrayList<NameValuePair>();
Set set = params.keySet();
Iterator keys = set.iterator();
while(true){//循环的设置参数
if(keys.hasNext() == false)break;
String key = (String) keys.next();
nvps.add(new BasicNameValuePair(key,params.get(key)));
}
}
InputStream is = null;
String json = null;
try {
if(nvps != null){//有参数
hp.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));//设置发送参数,以及传输编码
}
//执行请求
HttpResponse hr = hc.execute(hp);
//获取服务端返回内容
HttpEntity he = hr.getEntity();
is = he.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is,HTTP.UTF_8));
json = br.readLine();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
is.close();
}
return json;
}
}
客户端:
//根据自己的实际情况,编写自己的访问的服务器路径
String bathPath = "...";
//url:服务器端你所自定的url名
try{
//j接受数据
String json = DataBridge.executeToString("url",null);
//接下来是对接收数据所进行的处理
//......................
}catch(Exception e){
e.printStackTrace();
}
web Service进行网络编程。
webView视图进行网络编程。