我们完成“Android入门:通过XML数据与服务器进行通信“同样的功能,只是数据传输使用JSON而不是XML;

注意点:

(1)当返回JSON时,content-type为text/json;

(2)通过JSON包进行解析JSON格式数据和生成JSON格式数据;

(3)Android中已经集成了JSON的包;

一、核心代码介绍

服务器端核心代码:

(1)JSONStringer stringer = new JSONStringer();

(2)stringer.array().endArray();

(3)stringer.object().key("key").value("value").endObject();

(4)String str = stringer.toString();

客户端核心代码:

(1)JSONArray array = new JSONArray(String str); //将字符串转为JSONArray格式

(2)JSONObject object = array.getJSONObject(int index);

(3)int value = object.getInt(String name);

(4)String value = object.getString(String name);

二、全部代码

服务器端:

ListServlet.java

package org.xiazdong.servlet;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.json.JSONStringer;
import org.xiazdong.domain.Person;@WebServlet("/ListServlet")
public class ListServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<Person> list = new ArrayList<Person>();for(int i=0;i<4;i++){Person person = new Person(i,"xiazdong-"+i,20+i);list.add(person);}//将List<Person>组织成JSON字符串JSONStringer stringer = new JSONStringer();try{stringer.array();for(Person person:list){stringer.object().key("id").value(person.getId()).key("name").value(person.getName()).key("age").value(person.getAge()).endObject();}stringer.endArray();}catch(Exception e){}response.getOutputStream().write(stringer.toString().getBytes("UTF-8"));response.setContentType("text/json; charset=UTF-8");  //JSON的类型为text/json}}

在浏览器中访问效果如下:

客户端:

MainActivity.java

package org.xiazdong.personlist;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
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 org.xiazdong.domain.Person;
import org.xmlpull.v1.XmlPullParser;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.widget.ListView;
import android.widget.SimpleAdapter;public class MainActivity extends Activity {private ListView listView;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);listView = (ListView) this.findViewById(R.id.listview);List<Person> persons = null;try {persons = getJSONData();} catch (Exception e) {e.printStackTrace();}List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();for (Person person : persons) {HashMap<String, Object> map = new HashMap<String, Object>();map.put("id", person.getId());map.put("name", person.getName());map.put("age", person.getAge());maps.add(map);}SimpleAdapter adapter = new SimpleAdapter(this, maps, R.layout.item,new String[] { "id", "name", "age" }, new int[] { R.id.id,R.id.name, R.id.age });listView.setAdapter(adapter);}//读取JSON数据并转为List<Person>private List<Person> getJSONData() throws Exception {List<Person> persons = new ArrayList<Person>();URL url = new URL("http://192.168.0.103:8080/Server/ListServlet");HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");if (conn.getResponseCode() == 200) {InputStream in = conn.getInputStream();persons = parseJSON(in);}return persons;}private List<Person> parseJSON(InputStream in)throws Exception{List<Person> persons = new ArrayList<Person>();Person person = null;String str = read(in);JSONArray array = new JSONArray(str);int length = array.length();for(int i=0;i<length;i++){JSONObject object = array.getJSONObject(i);person = new Person(object.getInt("id"), object.getString("name"), object.getInt("age"));persons.add(person);}return persons;}private String read(InputStream in) throws IOException {byte[] data;ByteArrayOutputStream bout = new ByteArrayOutputStream();byte[]buf = new byte[1024];int len = 0;while((len = in.read(buf))!=-1){bout.write(buf, 0, len);}data = bout.toByteArray();return new String(data,"UTF-8");}
}

总结:

JSON和XML都是数据传输的两种格式;

转载于:https://www.cnblogs.com/xiazdong/archive/2012/07/06/3058326.html

Android入门:通过JSON数据与服务器进行通信相关推荐

  1. json数据解析 android,Android基础之json数据解析

    这次来聊聊Android中json数据的解析,既然是基础就要求只要你看一遍就必须会的,不牵涉到太多的复杂逻辑,目的就是让你初步认识json数据的解析和学会对简单的json数据进行解析. 首先第一步我们 ...

  2. android 解析新浪微博json数据

    从新浪微博服务器获取到了好友微博的json数据后如何去解析着实让我费了一番功夫.因为返回的json数据格式比较复杂.下面我就通过代码说明一下如何来解析新浪微博的json数据.先来看一下从服务器端返回的 ...

  3. Android学习之JSON数据解析

    在Android应用开发中,常用的数据交换格式有XML和JSON,这两种方式各有各的好处,我们在特定的应用开发中可以选择合适的一种.下面来看一下JOSN数据解析: 例子永远是最好的教程,下面我们来看个 ...

  4. 【Android】解析Json数据

    Json数据:"{\"UserID\":\"Allen\",\"Dep\":IT,\"QQ\":\" ...

  5. 记-curl post json数据,服务器后端$_POST接收不到数据

    curl端:向某服务器后端接口返回数据 $url = "http://xxx.com/getdataFile.php";  $curl = curl_init();         ...

  6. 发送JSON数据给服务器

    需要将JSON格式的数据传送给服务器,注意需要设置: [request setValue:@"application/json" forHTTPHeaderField:@" ...

  7. android开发学习 ------- json数据与实体类之间的相互转换

    在网络请求的时候,会返回给我们实体类,我们需要将实体类转化为json字符串,方便处理数据: 有时候也会将json数据转换为实体类. 在Android Studio中,json要互相转换,需要用到gso ...

  8. android 快速解析json数据搭配Gson库中Android Studio插件 GsonFormat

    转:https://www.jianshu.com/p/d34c5e7c8227 更简洁的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果对json解析 ...

  9. php+获取post提交,php处理json数据(从服务器获取,post提交)

    /* author yangkaka 2016-02-29 php通过post发送json数据 */ function http_post_json($url,$jsonstr){ //init $c ...

最新文章

  1. 教你高效地学习和制作PPT
  2. 2019年AI实力对决:美国领跑,中国追赶,欧盟弱势
  3. java命名规则_Java命名规则
  4. Powershell指令集_2
  5. 使用c++进行Windows编程中各种操作文件的方法 【转】
  6. 原生JS DOM操作方法汇总
  7. 装饰器模式与java.io包
  8. python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...
  9. 【学习笔记】路由算法与路由协议:RIP协议与距离向量算法、OSPF协议与链路状态算法、BGP协议
  10. sql2000数据类型对应的数值_Qlikview---数据类型
  11. 猫狗识别基于kaggle数据集
  12. 坐标系ICRS与ITRS相互转换,时间系统及转换
  13. python汇率兑换程序_Python中汇率兑换程序的实现,python
  14. 系统崩溃分析 - vmcore 加载到 Trace32
  15. 激光雕刻机装上AI,混合材料T恤上都能雕出花,自动变换力度保证不割破
  16. LaTeX之双栏模板表格布局(单双栏满宽+不满宽)
  17. Cesium 根据经纬度获取地形高程
  18. selenium 无头模式截屏
  19. php dateparse,PHP date_parse_from_format() 函数用法及示例
  20. 报错:java.io.NotSerializableException: com.kuang.pojo.User

热门文章

  1. Visio 与 Access 2007 的集成应用
  2. 中国的城市看多了,贴贴美国的城市,肯定对你的视觉产生冲击
  3. oracle动一下卡一下,记录一次Oracle很卡事件
  4. Java NIO学习篇之缓冲区Buffer详解
  5. 3-3Tensor和机器学习的关系
  6. c6011取消对null指针的引用_COM编程攻略(二十二 IDL中的枚举,指针,数组)
  7. 有效集法介绍(Active Set Method)
  8. python怎么分析数据结构_《利用Python进行数据分析》第五章-pandas的数据结构介绍...
  9. 热更新_热更新必懂3件事
  10. python创建线程在后台运行