android之json浅谈

在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视图进行网络编程。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值