android之JSON 进行网络数据交换

时间:2021-07-11 02:52:53

什么是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 进行网络数据交换

android之JSON 进行网络数据交换的更多相关文章

  1. Android之使用json进行网络数据交换

    JSON作为一种轻量级的数据交换格式,凭借其易于阅读和编写.易于解析.传输速度快等优点流行了起来.最近正好在学习Android端从服务端端取数据,Json便派上了用场.好,下面开始切入主题. 1.准备 ...

  2. Android利用Fiddler进行网络数据抓包

    最新最准确内容建议直接访问原文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信 ...

  3. Android利用Fiddler进行网络数据抓包&comma;手机抓包工具汇总

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  4. Android - 使用Volley请求网络数据

    Android - 使用Volley请求网络数据 Android L : Android Studio 14 个人使用volley的小记,简述使用方法,不涉及volley源码 准备工作 导入Volle ...

  5. Android利用Fiddler进行网络数据抓包&comma;手机抓包工具汇总&comma;使用mono运行filddler

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  6. JQuery &plus; JSON作为前后台数据交换格式实践

    JQuery + JSON作为前后台数据交换 JQuery提供良好的异步加载接口AJAX,可以局部更新页面数据, http://api.jquery.com/category/ajax/ JSON作为 ...

  7. 二维码与json都是数据交换格式

    二维码与json都是数据交换格式: UI数据是人机数据交换格式.

  8. &lbrack;Android&rsqb;天气App 3 网络数据的请求和Json解析

      Android客户端开发,不仅仅是在Android端开发,还需要有相应的后台服务支持,否则的话,客户端的数据就只能放到本地自己做处理.我认为的原生态的App就是对应服务端的Client.他能像浏览 ...

  9. Android读写JSON格式的数据之JsonWriter和JsonReader

    近期的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.近期打算找一份Android的工作,要继续拾起曾经的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才開始办公 ...

随机推荐

  1. ASP&period;NET MVC 4 Attribute特性

    [AcceptVerbs(-)] To specify HTTP verbs an action method will respond to. 要指定HTTP动词的将响应的一个操作方法. [Acti ...

  2. 第二次作业——C&plus;&plus;学习

    课程选择: 以往在自学的过程就比较留意一些自学的网站,所以这次"C++自学"感觉找课程还是比较轻松的. 因为之前网页等学习都是在慕课网(视频学习个人感觉有时挺费时间的,特别是有时以 ...

  3. Metro中控件WebView访问外部的网页显示一片空白

    Metro中控件WebView访问外部的网页显示一片空白 解决方案: ​下载安装了Initex.Software.Proxifier.v3.21.Standard.Edition.Incl.Keyma ...

  4. Linux 硬连接和软连接的原理 (in使用)

    引子 目前,UNIX的文件系统有很多种实现,例如UFS(基于BSD的UNIX文件系统).ext3.ext4.ZFS和Reiserfs等等. 不论哪一种文件系统,总是需要存储数据.硬盘的最小存储单位是扇 ...

  5. jQuery Mobile 学习

    jQuery Mobile 学习系列 http://blog.csdn.net/bao990423420/article/details/13995021

  6. android引入百度地图之最简单的例子-HelloBaiDuMap

    开发工具 我用的是eclipse,目前这是开发android用的最多的一个工具. 开发准备 首先需要在百度地图开发平台上下载所需要的文档和功能,由于最新版的3.0.0的不是很熟悉,我这里用的是稍旧一点 ...

  7. 解决代理池的问题AttributeError&colon; &&num;39&semi;int&&num;39&semi; object has no attribute &&num;39&semi;items&&num;39&semi;

    https://blog.csdn.net/mygodit/article/details/86689127

  8. Impl模式实现之注意内联

    最近学习muduo源码时,对于内联函数有了更深刻的认知. 内联(inline)在代码执行方面具有优势,但是有时使用不当,或者稍微不注意,就会造成编译错误. 以下将通过Impl实现说明一二: 头文件: ...

  9. 【THUSC2017】杜老师

    题目描述 杜老师可是要打+∞年World Final的男人,虽然规则不允许,但是可以改啊! 但是今年WF跟THUSC的时间这么近,所以他造了一个idea就扔下不管了…… 给定L,R,求从L到R的这R− ...

  10. 【转载】Redhat5和6 YUM源配置的区别

    Redhat5和6 YUM源配置的区别  一.概述    随着各个软件版本的不断升级,我们需要掌握的软件特性也越来越多,技术的不断更新也促进了我们脑细胞的循环. 今天在配置RedHat6.3的yum源 ...