fastjson生成和解析json数据

本文讲解2点:

1. fastjson生成和解析json数据

(举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>)

2.通过一个android程序测试fastjson的用法。

fastjson简介:

Fastjson是一个Java语言编写的高性能功能完善的JSON库。fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。并且还超越了google的二进制协议protocol buf。Fastjson完全支持http://json.org的标准,也是官方网站收录的参考实现之一。支持各种JDK类型。包括基本类型、JavaBean、Collection、Map、Enum、泛型等。支持JDK 5、JDK 6、Android、阿里云手机等环境。

一. fastjson生成json字符串(JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>)

String jsonStrng = JSON.toJSONString(object);

二. fastjson 解析json字符串为四种类型

1. JavaBean

Person person = JSON.parseObject(jsonString, Person.class);

2. List<JavaBean>

List<Person> listPerson =JSON.parseArray(jsonString, Person.class);

3. List<String>

List<String> listString = JSON.parseArray(jsonString, String.class);

4. List<Map<String,Object>>

List<Map<String, Object>> listMap = JSON.parseObject(jsonString, new TypeReference<List<Map<String,Object>>>(){});  (注意:此处可看出fastjson反射机制比gson更准确, id = 1001 通过fastjson反射仍是 id = 1001 , 而通过gson反射结果 为 id =1001.0 ,参考前篇程序运行结果图GSON方式生成和解析json数据)

-----------------------------------------------------------------------------------------------------------------------------------------

程序运行结果:

fastjson生成和解析json数据

1. 点击“解析Person数据”按钮

fastjson生成和解析json数据

2. 点击“解析Persons数据按钮”

fastjson生成和解析json数据

3.点击“解析listString数据”按钮

fastjson生成和解析json数据

4.点击“解析listMap数据”按钮

fastjson生成和解析json数据

--------------------------------------------------------------------------------------------------------------------------------------

客户端eclipse android工程目录(左边)服务器端myeclipse web工程(右边)

fastjson生成和解析json数据    fastjson生成和解析json数据

---------------------------------------------------------------------------------------------------------------------------------------

服务器端 fastjson_Project

1.FastJsonAction.java

  1. package com.fastjson.action;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.fastjson.service.FastJsonService;
  9. import com.fastjson.tools.*;
  10. public class FastJsonAction extends HttpServlet {
  11. /**
  12. * Destruction of the servlet. <br>
  13. */
  14. public void destroy() {
  15. super.destroy(); // Just puts "destroy" string in log
  16. // Put your code here
  17. }
  18. /**
  19. * The doGet method of the servlet. <br>
  20. *
  21. * This method is called when a form has its tag value method equals to get.
  22. *
  23. * @param request the request send by the client to the server
  24. * @param response the response send by the server to the client
  25. * @throws ServletException if an error occurred
  26. * @throws IOException if an error occurred
  27. */
  28. public void doGet(HttpServletRequest request, HttpServletResponse response)
  29. throws ServletException, IOException {
  30. this.doPost(request, response);
  31. }
  32. /**
  33. * The doPost method of the servlet. <br>
  34. *
  35. * This method is called when a form has its tag value method equals to post.
  36. *
  37. * @param request the request send by the client to the server
  38. * @param response the response send by the server to the client
  39. * @throws ServletException if an error occurred
  40. * @throws IOException if an error occurred
  41. */
  42. public void doPost(HttpServletRequest request, HttpServletResponse response)
  43. throws ServletException, IOException {
  44. response.setContentType("text/html;charset=utf-8");
  45. request.setCharacterEncoding("utf-8");
  46. response.setCharacterEncoding("utf-8");
  47. String action_flag = request.getParameter("action_flag");
  48. PrintWriter out = response.getWriter();
  49. if ("person".equals(action_flag)) {
  50. //      String person = GsonTools.creatJsonString(GsonService.getPerson());
  51. String person = FastJsonTools.createJsonString(FastJsonService.getPerson());
  52. out.println(person);
  53. System.out.println(person);
  54. } else if("persons".equals(action_flag)) {
  55. //      String persons = GsonTools.creatJsonString(GsonService.getListPersons());
  56. String persons = FastJsonTools.createJsonString(FastJsonService.getListPersons());
  57. out.println(persons);
  58. System.out.println(persons);
  59. }else if("listString".equals(action_flag)) {
  60. //  String listString = GsonTools.creatJsonString(GsonService.getListString());
  61. String listString = FastJsonTools.createJsonString(FastJsonService.getListString());
  62. out.println(listString);
  63. System.out.println(listString);
  64. }else if("listMap".equals(action_flag)) {
  65. //  String listMap = GsonTools.creatJsonString(GsonService.getListMap());
  66. String listMap = FastJsonTools.createJsonString(FastJsonService.getListMap());
  67. out.println(listMap);
  68. System.out.println(listMap);
  69. }
  70. System.out.println();
  71. out.flush();
  72. out.close();
  73. }
  74. /**
  75. * Initialization of the servlet. <br>
  76. *
  77. * @throws ServletException if an error occurs
  78. */
  79. public void init() throws ServletException {
  80. // Put your code here
  81. }
  82. }

2.FastJsonService.java

  1. package com.fastjson.service;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.fastjson.data.Person;
  7. public class FastJsonService {
  8. public static Person getPerson() {
  9. Person person = new Person(1001, "刘德华", "香港");
  10. return person;
  11. }
  12. public static List<Person> getListPersons() {
  13. List<Person> persons = new ArrayList<Person>();
  14. Person person1 = new Person(1001, "刘德华", "香港");
  15. Person person2 = new Person(1002, "宋慧乔", "韩国");
  16. persons.add(person1);
  17. persons.add(person2);
  18. return persons;
  19. }
  20. public static List<String> getListString(){
  21. List<String> list = new ArrayList<String>();
  22. list.add("美国");
  23. list.add("中国");
  24. list.add("俄罗斯");
  25. return list;
  26. }
  27. public static List<java.util.Map<String, Object>> getListMap(){
  28. List<java.util.Map<String, Object>> list = new ArrayList<Map<String,Object>>();
  29. java.util.Map<String,Object> map1 = new HashMap<String,Object>();
  30. map1.put("id",1001);
  31. map1.put("name","刘德华");
  32. map1.put("address","香港");
  33. java.util.Map<String,Object> map2 = new HashMap<String,Object>();
  34. map2.put("id",1002);
  35. map2.put("name","宋慧乔");
  36. map2.put("address","韩国");
  37. list.add(map1);
  38. list.add(map2);
  39. return list;
  40. }
  41. }

3.FastJsonTools.java

  1. package com.fastjson.tools;
  2. import  com.alibaba.fastjson.*;
  3. public class FastJsonTools {
  4. public static String createJsonString(Object object){
  5. String jsonString = "";
  6. try {
  7. jsonString = JSON.toJSONString(object);
  8. } catch (Exception e) {
  9. // TODO: handle exception
  10. }
  11. return jsonString;
  12. }
  13. }

4.Person.java

  1. package com.fastjson.data;
  2. public class Person {
  3. private int id;
  4. private String name;
  5. private String address;
  6. public Person() {
  7. // TODO Auto-generated constructor stub
  8. }
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getAddress() {
  22. return address;
  23. }
  24. public void setAddress(String address) {
  25. this.address = address;
  26. }
  27. public Person(int id, String name, String address) {
  28. super();
  29. this.id = id;
  30. this.name = name;
  31. this.address = address;
  32. }
  33. @Override
  34. public String toString() {
  35. return "Person [id=" + id + ", name=" + name + ", address=" + address
  36. + "]";
  37. }
  38. }

5. TestFastJson.java

  1. package com.fastjson.test;
  2. import com.fastjson.service.FastJsonService;
  3. import com.fastjson.tools.FastJsonTools;
  4. public class TestFastJson {
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. //Test1 Person
  11. System.out.println("FastJson数据格式测试结果:\n");
  12. String person = FastJsonTools.createJsonString(FastJsonService.getPerson());
  13. //Test2 persons
  14. String listPerson =  FastJsonTools.createJsonString(FastJsonService.getListPersons());
  15. //Test3 listString
  16. String listString =  FastJsonTools.createJsonString(FastJsonService.getListString()) ;
  17. //Test 4 listMap
  18. String listMap = FastJsonTools.createJsonString(FastJsonService.getListMap()) ;
  19. System.out.println("测试结果1:"+person+"\n");
  20. System.out.println("测试结果2:"+listPerson+"\n");
  21. System.out.println("测试结果3:"+listString+"\n");
  22. System.out.println("测试结果4:"+listMap);
  23. }
  24. }

客户端:android_fastjson

1.MainActivity.java

  1. package com.android.mygson;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.Serializable;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.util.List;
  9. import java.util.Map;
  10. import com.alibaba.fastjson.JSON;
  11. import com.alibaba.fastjson.TypeReference;
  12. import com.fastjson.tools.FastJsonTools;
  13. import com.gson.data.Person;
  14. import com.gson.http.HttpUtils;
  15. import android.os.Bundle;
  16. import android.os.StrictMode;
  17. import android.annotation.SuppressLint;
  18. import android.app.Activity;
  19. import android.content.Intent;
  20. import android.view.View;
  21. import android.view.View.OnClickListener;
  22. import android.widget.Button;
  23. public class MainActivity extends Activity implements OnClickListener {
  24. private Button person, persons, listString, listMap;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_main);
  29. closeStrictMode();//关闭严苛模式
  30. person = (Button) findViewById(R.id.person);
  31. persons = (Button) findViewById(R.id.persons);
  32. listString = (Button) findViewById(R.id.listString);
  33. listMap = (Button) findViewById(R.id.listMap);
  34. person.setOnClickListener(this);
  35. persons.setOnClickListener(this);
  36. listString.setOnClickListener(this);
  37. listMap.setOnClickListener(this);
  38. }
  39. @Override
  40. public void onClick(View v) {
  41. // TODO Auto-generated method stub
  42. switch (v.getId()) {
  43. case R.id.person:
  44. String url_path = "http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=person";
  45. String jsonString = HttpUtils.getJsonContent(url_path, "utf-8");
  46. Person person = FastJsonTools.getPerson(jsonString, Person.class);
  47. //用fastJson技术解析json字符串,转换为Person对象
  48. //      Person person = JSON.parseObject(jsonString, Person.class);
  49. Intent intent = new Intent(MainActivity.this, OtherActivity.class);
  50. intent.putExtra("click_flag", "person");
  51. intent.putExtra("person", (Serializable) person);
  52. startActivity(intent);
  53. // Log.i(TAG, person.toString());
  54. break;
  55. case R.id.persons:
  56. String url_path2 = "http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=persons";
  57. String jsonString2 = HttpUtils.getJsonContent(url_path2, "utf-8");
  58. // 用fastjson 将json字符串转换成 List<Person>
  59. //      List<Person> listPerson =JSON.parseArray(jsonString2, Person.class);
  60. List<Person> listPerson =FastJsonTools.getPersons(jsonString2, Person.class);
  61. Intent intent2 = new Intent(MainActivity.this, OtherActivity.class);
  62. intent2.putExtra("click_flag", "persons");
  63. intent2.putExtra("persons", (Serializable) listPerson); // 用Intent传递 List<Person>数据类型
  64. startActivity(intent2);
  65. break;
  66. case R.id.listString:
  67. String url_path3 = "http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=listString";
  68. String jsonString3 = HttpUtils.getJsonContent(url_path3, "utf-8");
  69. // 用fastjson 将json字符串转换成 List<String>
  70. //      List<String> listString = JSON.parseArray(jsonString3, String.class);
  71. List<String> listString = FastJsonTools.getPersons(jsonString3,String.class);
  72. Intent intent3 = new Intent(MainActivity.this, OtherActivity.class);
  73. intent3.putExtra("click_flag", "listString");
  74. intent3.putExtra("listString", (Serializable) listString); // 用Intent传递 List<Person>数据类型
  75. startActivity(intent3);
  76. break;
  77. case R.id.listMap:
  78. String url_path4 = "http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=listMap";
  79. String jsonString4 = HttpUtils.getJsonContent(url_path4, "utf-8");
  80. // 用fastjson 将json字符串转换成 List<Map<String,Object>>
  81. //  List<Map<String, Object>> listMap = JSON.parseObject(jsonString4, new TypeReference<List<Map<String,Object>>>(){});
  82. List<Map<String, Object>> listMap = FastJsonTools.getListMap(jsonString4);
  83. Intent intent4 = new Intent(MainActivity.this, OtherActivity.class);
  84. intent4.putExtra("click_flag", "listMap");
  85. intent4.putExtra("listMap", (Serializable) listMap); // 用Intent传递 List<Map<Sting,Object>>数据类型
  86. intent4.putExtra("jsonString", jsonString4);
  87. startActivity(intent4);
  88. break;
  89. }
  90. }
  91. @SuppressLint("NewApi")
  92. public static void closeStrictMode() {
  93. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
  94. .detectAll().penaltyLog().build());
  95. }
  96. private static String changeInputStream(InputStream inputStream , String encode) throws IOException {
  97. // TODO Auto-generated method stub
  98. String  jsonString = null;
  99. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  100. byte[] data = new byte[1024];
  101. int len = 0;
  102. while((len=inputStream.read(data))!=-1){
  103. outputStream.write(data, 0, len);
  104. }
  105. jsonString = new String(outputStream.toByteArray(), encode);
  106. inputStream.close();
  107. return jsonString;
  108. }
  109. }

2.OtherActivity.java

  1. package com.android.mygson;
  2. import java.util.List;
  3. import java.util.Map;
  4. import com.gson.data.Person;
  5. import android.R.integer;
  6. import android.app.Activity;
  7. import android.content.Intent;
  8. import android.os.Bundle;
  9. import android.widget.TextView;
  10. public class OtherActivity extends Activity {
  11. private TextView textView;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. // TODO Auto-generated method stub
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_other);
  17. textView = (TextView) findViewById(R.id.msg);
  18. Intent intent = getIntent();
  19. String click_flag = intent.getStringExtra("click_flag");
  20. if ("person".equals(click_flag)) { // 如果是点击 person按钮
  21. // 接收Intent传递的Person对象
  22. Person person =(Person) intent.getSerializableExtra("person");
  23. textView.setText(person.toString());
  24. //      textView.setText("test :"+intent.getStringExtra("test"));
  25. } else if ("persons".equals(click_flag)) {// 如果是点击 persons按钮
  26. // 接收Intent传递的List<Person>参数
  27. @SuppressWarnings("unchecked")
  28. List<Person> list = (List<Person>) intent
  29. .getSerializableExtra("persons");
  30. String persons = "";
  31. for (Person person : list) {
  32. persons += person.toString() + "\n";
  33. }
  34. textView.setText(persons);
  35. }else if ("listString".equals(click_flag)) {
  36. List<String> list = (List<String>) intent
  37. .getStringArrayListExtra("listString");
  38. String listString = "";
  39. for (String s : list) {
  40. listString += s + "\n";
  41. }
  42. textView.setText(listString);
  43. } else if ("listMap".equals(click_flag)) {
  44. //接收Intent传递的List<Map<String,Object>>参数
  45. @SuppressWarnings("unchecked")
  46. List<Map<String, Object>> list = (List<Map<String, Object>>) intent
  47. .getSerializableExtra("listMap");
  48. String listMapString = "";
  49. for (Map<String, Object> map : list) {
  50. // 遍历一个Map
  51. for (Map.Entry<String, Object> entry : map.entrySet()) {
  52. String key = entry.getKey();
  53. Object value = entry.getValue();
  54. listMapString += " " + key + " : " + value + " ";
  55. }
  56. listMapString += "\n";
  57. }
  58. textView.setText(listMapString+intent.getStringExtra("jsonString"));
  59. }
  60. }
  61. }

3.FastJsonTools.java

  1. package com.fastjson.tools;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;
  5. import com.alibaba.fastjson.JSON;
  6. import com.alibaba.fastjson.TypeReference;
  7. public class FastJsonTools {
  8. /**
  9. * 用fastjson 将json字符串解析为一个 JavaBean
  10. *
  11. * @param jsonString
  12. * @param cls
  13. * @return
  14. */
  15. public static <T> T getPerson(String jsonString, Class<T> cls) {
  16. T t = null;
  17. try {
  18. t = JSON.parseObject(jsonString, cls);
  19. } catch (Exception e) {
  20. // TODO: handle exception
  21. e.printStackTrace();
  22. }
  23. return t;
  24. }
  25. /**
  26. * 用fastjson 将json字符串 解析成为一个 List<JavaBean> 及 List<String>
  27. *
  28. * @param jsonString
  29. * @param cls
  30. * @return
  31. */
  32. public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
  33. List<T> list = new ArrayList<T>();
  34. try {
  35. list = JSON.parseArray(jsonString, cls);
  36. } catch (Exception e) {
  37. // TODO: handle exception
  38. }
  39. return list;
  40. }
  41. /**
  42. * 用fastjson 将jsonString 解析成 List<Map<String,Object>>
  43. *
  44. * @param jsonString
  45. * @return
  46. */
  47. public static List<Map<String, Object>> getListMap(String jsonString) {
  48. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  49. try {
  50. // 两种写法
  51. // list = JSON.parseObject(jsonString, new
  52. // TypeReference<List<Map<String, Object>>>(){}.getType());
  53. list = JSON.parseObject(jsonString,
  54. new TypeReference<List<Map<String, Object>>>() {
  55. });
  56. } catch (Exception e) {
  57. // TODO: handle exception
  58. }
  59. return list;
  60. }
  61. }

4.Person.java

  1. package com.gson.data;
  2. import java.io.Serializable;
  3. public class Person implements Serializable{
  4. private int id;
  5. private String name;
  6. private String address;
  7. public Person() {
  8. // TODO Auto-generated constructor stub
  9. }
  10. public int getId() {
  11. return id;
  12. }
  13. public void setId(int id) {
  14. this.id = id;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public String getAddress() {
  23. return address;
  24. }
  25. public void setAddress(String address) {
  26. this.address = address;
  27. }
  28. public Person(int id, String name, String address) {
  29. super();
  30. this.id = id;
  31. this.name = name;
  32. this.address = address;
  33. }
  34. @Override
  35. public String toString() {
  36. return "Person [id=" + id + ", name=" + name + ", address=" + address
  37. + "]";
  38. }
  39. }

5.HttpUtils.java

  1. package com.gson.http;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import android.annotation.SuppressLint;
  8. import android.os.StrictMode;
  9. /** 接收path服务器端返回的 InputStream, 转换为 json字符串
  10. * @author ben
  11. *
  12. */
  13. public class HttpUtils {
  14. public static String getJsonContent(String url_path ,String encode){
  15. String jsonString = "";
  16. try {
  17. URL url = new URL(url_path);
  18. HttpURLConnection connection = (HttpURLConnection)url.openConnection();
  19. connection.setConnectTimeout(3000);
  20. connection.setRequestMethod("GET");
  21. connection.setDoInput(true);  //从服务器获得数据
  22. int responseCode = connection.getResponseCode();
  23. if (200 == responseCode) {
  24. jsonString = changeInputStream(connection.getInputStream(),encode);
  25. }
  26. } catch (Exception e) {
  27. // TODO: handle exception
  28. }
  29. //
  30. return jsonString;
  31. }
  32. private static String changeInputStream(InputStream inputStream , String encode) throws IOException {
  33. // TODO Auto-generated method stub
  34. String  jsonString = null;
  35. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  36. byte[] data = new byte[1024];
  37. int len = 0;
  38. while((len=inputStream.read(data))!=-1){
  39. outputStream.write(data, 0, len);
  40. }
  41. jsonString = new String(outputStream.toByteArray(), encode);
  42. inputStream.close();
  43. return jsonString;
  44. }
  45. }

6.activity_matin.xml

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <Button
  7. android:id="@+id/person"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:text="解析Person数据" />
  11. <Button
  12. android:id="@+id/persons"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:text="解析Persons数据" />
  16. <Button
  17. android:id="@+id/listString"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content"
  20. android:text="解析listString数据" />
  21. <Button
  22. android:id="@+id/listMap"
  23. android:layout_width="match_parent"
  24. android:layout_height="wrap_content"
  25. android:text="解析listMap数据" />
  26. </LinearLayout>

7.activity_other.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:id="@+id/msg"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. />
  11. </LinearLayout>

8.AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.android.mygson"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="19" />
  9. <!-- 添加访问网络的授权 -->
  10. <span style="color:#ff0000;"><uses-permission android:name="android.permission.INTERNET" />
  11. </span>
  12. <application
  13. android:allowBackup="true"
  14. android:icon="@drawable/ic_launcher"
  15. android:label="@string/app_name"
  16. android:theme="@style/AppTheme" >
  17. <activity
  18. android:name="com.android.mygson.MainActivity"
  19. android:label="@string/app_name" >
  20. <intent-filter>
  21. <action android:name="android.intent.action.MAIN" />
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. <span style="color:#ff0000;"><activity android:name=".OtherActivity"></activity></span>
  26. </application>
  27. </manifest>

-----------------------------------------------------------------------------------------------------------------

注意一点:

泛型方法

客户端:FastJsonToos.java 泛型方法的写法。

http://blog.csdn.net/neu_yousei/article/details/23184727

上一篇:1059. Prime Factors (25)


下一篇:小强HTML5手机发展之路(52)——jquerymobile触摸互动