android之JSON 进行网络数据交换「建议收藏」

android之JSON 进行网络数据交换

大家好,又见面了,我是全栈君。

什么是JSON

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同一时候也易于机器解析和生成,很适合于server与client的交互。

JSON 採用与编程语言无关的文本格式,可是也使用了类C 语言的习惯。这些特性使JSON 成为理想的数据交换格式。

和 XML 一样,JSON 也是基于纯文本的数据格式。因为 JSON 天生是为 JavaScript 准备的,因此。JSON 的数据格式很easy,您能够用 JSON 传输一个简单的 String,Number。Boolean。也能够传输
一个数组。或者一个复杂的 Object 对象。String,Number 和 Boolean 用 JSON 表示很easy。

比如,用 JSON 表示一个简单的字符串

“ abc ”。其格式为:”abc”。

除了字符 “。\,/ 和一些控制符(\b。\f,\n。\r,\t)须要编码外,其它 Unicode 字符能够直接输出。


       Boolean 类型表示为 true 或 false 。

此外,JavaScript 中的 null 被表示为 null,注意,true、false和 null 都没有双引號,否则将被视为一个 String 。

JSON 还能够表示一个数组对象,使用 [] 包括全部元素,每一个元素用逗号分隔。元素能够是随意的
Value。比如,下面数组包括了一个 String,Number。Boolean 和一个 null:

["abc",12345,false,null]

Object 对象在 JSON 中是用 {} 包括一系列无序的 Key-Value 键值对表示的。实际上此处的
Object 相当于 Java 中的 Map<String, Object>。而不是 Java 的 Class 。注意 Key 仅仅能用 String 表
示。比如,一个 Address 对象包括例如以下 Key-Value:
                                        city:Beijing
                                         street:Chaoyang Road
                                       postcode:100025(整数)
用JSON 表演示样例如以下:

       

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

当中 Value 也能够是还有一个 Object 或者数组,因此,复杂的 Object 能够嵌套表示,比如。一个
Person 对象包括 name 和 address 对象,能够表演示样例如以下:

        

{"name":"Michael","address":
 {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
 }


以下写一个实例:(记得server端要先导包)

     这是在我以前写好的代码上写的。我如今把主要代码写下。

     新建一个servlet:

      

package cn.four.json;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.print.event.PrintServiceAttributeEvent;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import cn.four.service.Foundservice;
import cn.four.service.FoundserviceImp;
import cn.four.user.Found;



public class JSONDemoServlet extends HttpServlet {

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Foundservice fd=new FoundserviceImp();   //我这是曾经写过的。继承接口
		
		List<Found> list=fd.getfound();       //new 一个list
		JSONObject jsb=new JSONObject();      //new 一个JSONObject对象
		
		jsb.put("foundlist",list);           //得到转成后的数据
		
		JSONArray fdarray=jsb.getJSONArray("foundlist");     //存到数组
		
		response.setContentType("text/plain");//解决乱码
		response.setCharacterEncoding("UTF-8");
		PrintWriter out=response.getWriter();
		 out.write(fdarray.toString());   //关闭
		 out.flush();
		 out.close();
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
	}

}

server端就这样结束了。

以下是android的介绍

         Android SDK 提供了Apache 的HttpClient 类处理网络訪问,相信非常多读者朋友都在其它项目其中用
到过HttpClient。我写了一个方法类,获取某一网址的网页内容,代码例如以下:

package com.four.http;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

public class httpcontent {
	
	public String getContent(String url) throws Exception {
		StringBuilder sb = new StringBuilder();

		HttpClient client = new DefaultHttpClient();
		HttpParams httpParams = client.getParams();
		// 设置网络超时參数
		HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
		HttpConnectionParams.setSoTimeout(httpParams, 5000);
		HttpResponse response = client.execute(new HttpGet(url));
		HttpEntity entity = response.getEntity();
		if (entity != null) {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					entity.getContent(), "UTF-8"), 8192);

			String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line + "\n");
			}
			reader.close();
		}
		return sb.toString();
}

}

我感觉这就是一个固定的类,仅仅要用到JSON,就能够拿去用。临时没试,不知道对不正确啊。

      

package com.example.mychat;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.four.http.httpcontent;

public class User_tips extends Activity {

	httpcontent content = new httpcontent();
	private Button btnshua;
	private ListView xianshi;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_user_tips);
		btnshua = (Button) findViewById(R.id.btnshua);
		xianshi = (ListView) findViewById(R.id.listView1);
		btnshua.setOnClickListener(new shualistener());

	}

	class shualistener implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub		
			listxianshi();
		}

	}

	private List<Map<String, Object>> getmessg(String url) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		String body;
		try {
			body = content.getContent(url);
			JSONArray array = new JSONArray(body);
			for (int i = 0; i < array.length(); i++) {
				JSONObject obj = array.getJSONObject(i);
				Map<String, Object> map = new HashMap<String, Object>();
				map.put("foundname", obj.getString("foundname"));
				map.put("foundplace", obj.getString("foundplace"));
				list.add(map);
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

	private void listxianshi(){
		try {
			String url = "http://10.20.180.34:8080/lostfound/JSONDemoServlet";
			SimpleAdapter adapter = new SimpleAdapter(this,
					getmessg(url), R.layout.list_item, new String[] {
							"foundname", "username" }, new int[] {
							R.id.foundname, R.id.username });
			xianshi.setAdapter(adapter);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

效果图:

android之JSON 进行网络数据交换「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116377.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 区块链P2P网络协议演进过程[通俗易懂]

    区块链P2P网络协议演进过程[通俗易懂]区块链是以加密机制、储存机制、共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能。区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服务,实现中心化系统中类似金融中介机构的功能。共识机制是网络大部分节点在约定时间段内对交易状态达成相同的确认,其中共识性通过工作量证明(POW)、权益证明(POS)、实用拜占庭容错(PBFT)等多种共识算法实现。而一致性则要求大部分节点在约定时间段内保持数据内容一致,从而利用共识算法实现共识。传统中心化网络系统需

    2022年10月8日
    4
  • 2021 年6月面试遭遇滑铁卢,现在这么内卷了吗

    2021 年6月面试遭遇滑铁卢,现在这么内卷了吗

    2022年2月19日
    37
  • 台式电脑用网线可以上网,为什么把网线插到笔记本电脑上就连不上网的问题的解决

    台式电脑用网线可以上网,为什么把网线插到笔记本电脑上就连不上网的问题的解决那是笔记本网卡设置有问题。查看连接属性IP地址及DNS服务器是否是自动获得。然后修改成和台式机一样的为自动获得,即可让你的笔记本进入使用状态了!管理员在2009年8月13日编辑了该文章文章。–> –> window._bd_sh

    2022年6月26日
    52
  • CreatePipe()等函数创建管道来操纵控制台

    CreatePipe()等函数创建管道来操纵控制台#include  #include    #define BUFSIZE 4096   HANDLE hChildStdinRd, hChildStdinWr, hChildStdinWrDup,    hChildStdoutRd, hChildStdoutWr, hChildStdoutRdDup,    hInputFile, hStdout;   BO

    2022年7月14日
    17
  • 理解VUE响应式原理[通俗易懂]

    理解VUE响应式原理[通俗易懂]1、响应式原理基础响应式原理基础是基于Object.defineProperty(obj,prop,descriptor),descriptor里面可以定义get和set方法,可以在获取属性值事触发get方法(可以收集依赖),设置属性值时触发set方法(更新依赖)。扩展:上面是vue2.0的基础原理,vue3.0的基础原理是:2、核心对象:Dep与WatcherDep:vue在data里申明的每一个属性都会生成一个Dep的实例对象,De…

    2022年4月30日
    33
  • 最小二乘法的详细推导过程-比之前见过的推导都简单!!!

    最小二乘法的详细推导过程-比之前见过的推导都简单!!!最小二乘法发展于天文学和大地测量学领域,科学家和数学家尝试为大航海探索时期的海洋航行挑战提供解决方案。准确描述天体的行为是船舰在大海洋上航行的关键,水手不能再依靠陆上目标导航作航行。来源:我是码农,转载请保留出处和链接!本文链接:http://www.54manong.com/?id=1203(function(){vars=”_”+Ma…

    2022年5月16日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号