日期:2014-05-16  浏览次数:20392 次

Json学习应用

                  Json应用
   由于懂味项目的需要、我这两天开始了开始了JSon的学习和应用、对于这个JSon,最初自己是什么都不懂、甚至都不知道它是应用到什么地方。没办法、做软件开发的就是这样:一个项目给你、即使你什么都不懂,都要很快地把它学习和应用。
   按照以往常用的方法、从百度上一个一个地找;看文档、读博客...慢慢地发现所有的文档、博客都是源自一个人的。就这样慢慢地查看了各个网页的资料后。(查看资料的过程不是想象的那么容易、一个个网页下来,眼珠子都快掉下来了。而且这个过程就花了我一天左右的时间)选择了一个最为详细的博客作为参考、然后按照其步骤走下去。
   值得庆幸的是按模板走的过程非常顺利、之前按李雄志和魏垚他们给资料走、走个几个过程都没有成功。有了这个成功的案列后、我就开始一步步查看案列,分析其中的过程。分析完后才发现原来Json就是个纸老虎。像hu总说的那样、跟其他的没什么两样。只是一种格式而已。
   下面我就详细分析下它的应用过程吧:最开始、我们在运用前需要下载好Json的包、我应用时下载了好几个包、还没了解每个包相应的作用。怕麻烦的话、我把它附在后面,有需要可以下载使用。包的应用最好是复制到lib目录下;之前的那种引入包的方法在这里会有问题。建议自己复制。好了、前期的准备工作好了后、下面我们开始新建一个Servlet类、里面有自动生成的DoPost方法和DoGet方法;我们应用时先在DoPost方法里调用DoGet方法、代码如下:

doGet(request,response);


然后我们就重点在DoGet方法里实现数据转换Json方法;代码如下、

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置字符编码
		response.setContentType("text/plain;UTF-8");  
        response.setCharacterEncoding("UTF-8");  
        PrintWriter out = response.getWriter();
        //准备用户数据
        DBInquire inquire=new DBInquire();
     	//进入数据库
        DbEntrance mysql=new DbEntrance();
        inquire.conn=mysql.getDBConnect();
        list=inquire.selectUser();
        //实例化一个JSON数据,用来存储用户数据
        JSONArray array=new JSONArray();
        //遍历链表,将数据一个个转移到JSON链表中
        for(int i=0;i<list.size();i++){
        	System.out.println("打印出数据库中的数据:"+list.get(i).getUName()+"-=-="+list.get(i).getUPwd());
        	//实例化一个JSON对象,用来存储用户数据
        	JSONObject obj = new JSONObject(); 
        	//存储用户名
        	obj.put("User",list.get(i).getUName());
        	//存储用户密码
        	obj.put("Pwd", list.get(i).getUPwd());
        	//存储用户电话
        	obj.put("tel",list.get(i).getUNumber());
        	//存储用户电子邮件
        	obj.put("email", list.get(i).getUEmail());
        	//添加到JSON链表中
            array.add(obj);
        }
        //输出  
        out.write(array.toString());  
        out.flush();  
        out.close(); 
        
	}


在这里使用的需要注意的是有关我们数据库的连接问题:有关密码,每个人的数据库密码是不一样的;然后将其部署到服务器上、关于怎么部署就是点击所建的servlet右键运行就好、然后在网页上以键值对形式显示数据库中的形式。

   接着就是Android端的接收情况了、我们新建一个Android项目,在layout布局里面建一个TextView 代码如下:

<TextView android:id="@+id/textView" 
	    android:layout_width="fill_parent" 
	    android:layout_height="fill_parent"/>


布局用于显示所接收的数据。然后回到MainActivity里、进行地址连接,这里需要注意的是:1、连接网络地址,2、接收时关于对应的Key值。代码如下:

public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    System.out.println("-=-=-=-=-=-=");
	    setContentView(R.layout.activity_main);
	    System.out.println("8888888888888888888");
	    try{
	    	StringBuffer sb = new StringBuffer();
			//在测试过程中,经常是用本机做测试服务器,访问本机的IP地址要设置为10.0.2.2
	        String url = "http://10.0.2.2:8080/Coupons/JsonServletAndroid";
	        String body = getContent(url);
	        JSONArray array = new JSONArray(body);
	        System.out.println("所得Json的长度是:"+array.length());
	        for(int i=0; i<array.length(); i++){
	        	System.out.println("标记符11111111111111111111");
	        	JSONObject obj = array.getJSONObject(i);
	        	System.out.println("打印出第"+i+"个数据是:"+obj.getInt("User")+"-=-"+obj.getInt("Pwd"));
	        	sb.append("tel:").append(obj.getString("tel")).append("/r"+"/n");
	        	sb.append("name:").append(obj.getString("User")).append("/r"+"/n");
	        	sb.append("pwd:").append(obj.getString("Pwd")).append("/t");
	        	sb.append("email:").append(obj.getString("email")).append("/r/n");
	        	sb.