Android入门:通过JSON数据与服务器进行通信
我们完成“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数据与服务器进行通信相关推荐
- json数据解析 android,Android基础之json数据解析
这次来聊聊Android中json数据的解析,既然是基础就要求只要你看一遍就必须会的,不牵涉到太多的复杂逻辑,目的就是让你初步认识json数据的解析和学会对简单的json数据进行解析. 首先第一步我们 ...
- android 解析新浪微博json数据
从新浪微博服务器获取到了好友微博的json数据后如何去解析着实让我费了一番功夫.因为返回的json数据格式比较复杂.下面我就通过代码说明一下如何来解析新浪微博的json数据.先来看一下从服务器端返回的 ...
- Android学习之JSON数据解析
在Android应用开发中,常用的数据交换格式有XML和JSON,这两种方式各有各的好处,我们在特定的应用开发中可以选择合适的一种.下面来看一下JOSN数据解析: 例子永远是最好的教程,下面我们来看个 ...
- 【Android】解析Json数据
Json数据:"{\"UserID\":\"Allen\",\"Dep\":IT,\"QQ\":\" ...
- 记-curl post json数据,服务器后端$_POST接收不到数据
curl端:向某服务器后端接口返回数据 $url = "http://xxx.com/getdataFile.php"; $curl = curl_init(); ...
- 发送JSON数据给服务器
需要将JSON格式的数据传送给服务器,注意需要设置: [request setValue:@"application/json" forHTTPHeaderField:@" ...
- android开发学习 ------- json数据与实体类之间的相互转换
在网络请求的时候,会返回给我们实体类,我们需要将实体类转化为json字符串,方便处理数据: 有时候也会将json数据转换为实体类. 在Android Studio中,json要互相转换,需要用到gso ...
- android 快速解析json数据搭配Gson库中Android Studio插件 GsonFormat
转:https://www.jianshu.com/p/d34c5e7c8227 更简洁的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果对json解析 ...
- php+获取post提交,php处理json数据(从服务器获取,post提交)
/* author yangkaka 2016-02-29 php通过post发送json数据 */ function http_post_json($url,$jsonstr){ //init $c ...
最新文章
- 教你高效地学习和制作PPT
- 2019年AI实力对决:美国领跑,中国追赶,欧盟弱势
- java命名规则_Java命名规则
- Powershell指令集_2
- 使用c++进行Windows编程中各种操作文件的方法 【转】
- 原生JS DOM操作方法汇总
- 装饰器模式与java.io包
- python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...
- 【学习笔记】路由算法与路由协议:RIP协议与距离向量算法、OSPF协议与链路状态算法、BGP协议
- sql2000数据类型对应的数值_Qlikview---数据类型
- 猫狗识别基于kaggle数据集
- 坐标系ICRS与ITRS相互转换,时间系统及转换
- python汇率兑换程序_Python中汇率兑换程序的实现,python
- 系统崩溃分析 - vmcore 加载到 Trace32
- 激光雕刻机装上AI,混合材料T恤上都能雕出花,自动变换力度保证不割破
- LaTeX之双栏模板表格布局(单双栏满宽+不满宽)
- Cesium 根据经纬度获取地形高程
- selenium 无头模式截屏
- php dateparse,PHP date_parse_from_format() 函数用法及示例
- 报错:java.io.NotSerializableException: com.kuang.pojo.User
热门文章
- Visio 与 Access 2007 的集成应用
- 中国的城市看多了,贴贴美国的城市,肯定对你的视觉产生冲击
- oracle动一下卡一下,记录一次Oracle很卡事件
- Java NIO学习篇之缓冲区Buffer详解
- 3-3Tensor和机器学习的关系
- c6011取消对null指针的引用_COM编程攻略(二十二 IDL中的枚举,指针,数组)
- 有效集法介绍(Active Set Method)
- python怎么分析数据结构_《利用Python进行数据分析》第五章-pandas的数据结构介绍...
- 热更新_热更新必懂3件事
- python创建线程在后台运行