http://www.23code.com/tu-biao-chart/

从无到有,从来没有接触过Json,以及与服务器的交互。然后慢慢的熟悉,了解了一点。把我学到的东西简单的做个总结,也做个记录,万一以后用到,就不用到处找了。

主要是简单的数据交互,就是字符串的交互,传数据,取数据。刚开始用的普通方法,后来研究了下xUtils框架。

服务器端有人开发,这一块不是我负责,所以我只负责客户端传数据以及接受数据后的处理就OK了。

传递数据的形式,主要是看服务端的接口怎么写,服务器是接受JSON字符串,还是要form表单格式(我认为form表单格式就是键值对)。

xUtils:

不需要关联library,就下载jar包,复制到libs下就可以了,这是下载地址:http://download.csdn.net/detail/u012975370/9003713

还有就是,你如果想使用library到自己的项目下,注意一点主项目文件和library库文件,必须在同一个文件夹目录下,否则运行项目是报错的

http://blog.csdn.net/dj0379/article/details/38356773

项目原码地址:https://github.com/wyouflf/xUtils

http://www.gbtags.com/gb/share/4360.htm

Volley:

初识Volley的基本用法:http://www.apihome.cn/view-detail-70211.html

使用Volley加载网络图片:http://www.apihome.cn/view-detail-70212.html

定制自己的Request:http://www.apihome.cn/view-detail-70213.html

还有一些框架:KJFeame和Afinal

KJFrame:

http://git.oschina.net/kymjs/KJFrameForAndroid

http://www.codeceo.com/article/Android-orm-kjframeforandroid.html

1.要发送到服务器端的是以JSON字符串的形式发送的。(下面的格式)

[java] view plaincopy
  1. {"device":"hwG620S-UL00","brand":"HUAWEI","model":"G620S-UL00","imei":"865242025001258","romversion":"G620S-UL00V100R001C17B264"}
[java] view plaincopy
  1. private void sendData1() {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. Log.i(TEST_TAG, "2222");
  6. try {
  7. HttpPost post = new HttpPost(ACTIVATE_PATH);// post请求
  8. // 先封装一个JSON对象
  9. JSONObject param = new JSONObject();
  10. param.put("romversion", serviceInfoMap.get("romversion"));
  11. param.put("brand", serviceInfoMap.get("brand"));
  12. param.put("model", serviceInfoMap.get("model"));
  13. param.put("device", serviceInfoMap.get("device"));
  14. param.put("imei", serviceInfoMap.get("imei"));
  15. // 绑定到请求Entry
  16. StringEntity se = new StringEntity(param.toString(),
  17. "utf-8");
  18. post.setEntity(se);
  19. Log.i(TEST_TAG, "JSON为---> " + param.toString());
  20. // JSON为--->
  21. // {"device":"hwG620S-UL00","brand":"HUAWEI","model":"G620S-UL00","imei":"8<span style="white-space:pre">                 </span>// 65242025001258","romversion":"G620S-UL00V100R001C17B264"}
  22. // 发送请求
  23. HttpParams params = new BasicHttpParams();
  24. DefaultHttpClient localDefaultHttpClient = new DefaultHttpClient(
  25. params);
  26. localDefaultHttpClient.getParams().setParameter(
  27. "http.connection.timeout", Integer.valueOf(30000));
  28. localDefaultHttpClient.getParams().setParameter(
  29. "http.socket.timeout", Integer.valueOf(30000));
  30. HttpResponse response = localDefaultHttpClient
  31. .execute(post);
  32. // 得到应答的字符串,这也是一个JSON格式保存的数据
  33. String retStr = EntityUtils.toString(response.getEntity());
  34. // 生成JSON对象
  35. JSONObject result = new JSONObject(retStr);
  36. int status_value = response.getStatusLine().getStatusCode();
  37. Log.i(TEST_TAG, "" + status_value);
  38. String statusValue = "";
  39. statusValue = result.getString("status");
  40. Log.i(TEST_TAG, statusValue);
  41. if (!statusValue.equals("")) {
  42. // 如果不为空,说明取到了数据,然后就先关闭进去条
  43. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  44. // 然后判断值是否==1,来决定弹出哪个dialog
  45. // 激活成功,就把值传到系统的contentprovider,然后永久保存
  46. if (Integer.parseInt(statusValue) == 1) {
  47. mHandler.sendEmptyMessage(SHOW_SUCCESS);
  48. // 将值设置成1
  49. Settings.System.putInt(getContentResolver(),
  50. SETTING_MODIFY_NAME, 1);
  51. } else { // 只要是不为1外的其他值,都算失败,弹出失败的dialog
  52. mHandler.sendEmptyMessage(SHOW_FAILURE);
  53. }
  54. }
  55. } catch (UnsupportedEncodingException e) {
  56. e.printStackTrace();
  57. } catch (ClientProtocolException e) {
  58. e.printStackTrace();
  59. mHandler.sendEmptyMessage(CONTENT_STATUS);
  60. } catch (SocketException e) {
  61. mHandler.sendEmptyMessage(CONTENT_STATUS);
  62. } catch (IOException e) {
  63. mHandler.sendEmptyMessage(CONTENT_STATUS);
  64. e.printStackTrace();
  65. } catch (JSONException e) {
  66. mHandler.sendEmptyMessage(CONTENT_STATUS);
  67. e.printStackTrace();
  68. }
  69. }
  70. }).start();
  71. }

2.以form表单的格式发送到服务端

将传递的数据打印出来,格式是这样的,和json串是不一样的。[romversion=G620S-UL00V100R001C17B264, brand=HUAWEI, model=G620S-UL00, device=hwG620S-UL00, imei=865242024756522]

[java] view plaincopy
  1. private void sendData1() {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. Log.i(TEST_TAG, "2222");
  6. try {
  7. HttpPost post = new HttpPost(ACTIVATE_PATH);// post请求
  8. // 设置添加对象
  9. List<NameValuePair> paramsForm = new ArrayList<NameValuePair>();
  10. paramsForm.add(new BasicNameValuePair("romversion",
  11. serviceInfoMap.get("romversion")));
  12. paramsForm.add(new BasicNameValuePair("brand",
  13. serviceInfoMap.get("brand")));
  14. paramsForm.add(new BasicNameValuePair("model",
  15. serviceInfoMap.get("model")));
  16. paramsForm.add(new BasicNameValuePair("device",
  17. serviceInfoMap.get("device")));
  18. paramsForm.add(new BasicNameValuePair("imei",
  19. serviceInfoMap.get("imei")));
  20. Log.i(TEST_TAG, paramsForm.toString());
  21. post.setEntity(new UrlEncodedFormEntity(paramsForm,
  22. HTTP.UTF_8));
  23. // 发送请求
  24. HttpParams params = new BasicHttpParams();
  25. DefaultHttpClient localDefaultHttpClient = new DefaultHttpClient(
  26. params);
  27. localDefaultHttpClient.getParams().setParameter(
  28. "http.connection.timeout", Integer.valueOf(30000));
  29. localDefaultHttpClient.getParams().setParameter(
  30. "http.socket.timeout", Integer.valueOf(30000));
  31. HttpResponse response = localDefaultHttpClient
  32. .execute(post);
  33. // 得到应答的字符串,这也是一个JSON格式保存的数据
  34. String retStr = EntityUtils.toString(response.getEntity());
  35. // 生成JSON对象
  36. JSONObject result = new JSONObject(retStr);
  37. int status_value = response.getStatusLine().getStatusCode();
  38. Log.i(TEST_TAG, "" + status_value);
  39. String statusValue = "";
  40. statusValue = result.getString("status");
  41. Log.i(TEST_TAG, "status: " + statusValue);
  42. Log.i(TEST_TAG, "datatime: " + result.getString("datatime"));
  43. Log.i(TEST_TAG, "message: " + result.getString("message"));
  44. if (!statusValue.equals("")) {
  45. // 如果不为空,说明取到了数据,然后就先关闭进去条
  46. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  47. // 然后判断值是否==1,来决定弹出哪个dialog
  48. // 激活成功,就把值传到系统的contentprovider,然后永久保存
  49. if (Integer.parseInt(statusValue) == 1) {
  50. // 将值设置成1。需要加权限
  51. Settings.System.putInt(getContentResolver(),
  52. SETTING_MODIFY_NAME, 1);
  53. mHandler.sendEmptyMessage(SHOW_SUCCESS);
  54. } else { // 只要是不为1外的其他值,都算失败,弹出失败的dialog
  55. mHandler.sendEmptyMessage(SHOW_FAILURE);
  56. }
  57. }
  58. } catch (UnsupportedEncodingException e) {
  59. e.printStackTrace();
  60. mHandler.sendEmptyMessage(SHOW_FAILURE);
  61. mHandler.sendEmptyMessage(CONTENT_STATUS);
  62. } catch (ClientProtocolException e) {
  63. e.printStackTrace();
  64. mHandler.sendEmptyMessage(SHOW_FAILURE);
  65. mHandler.sendEmptyMessage(CONTENT_STATUS);
  66. } catch (SocketException e) {
  67. mHandler.sendEmptyMessage(SHOW_FAILURE);
  68. mHandler.sendEmptyMessage(CONTENT_STATUS);
  69. } catch (IOException e) {
  70. mHandler.sendEmptyMessage(SHOW_FAILURE);
  71. mHandler.sendEmptyMessage(CONTENT_STATUS);
  72. e.printStackTrace();
  73. } catch (JSONException e) {
  74. mHandler.sendEmptyMessage(SHOW_FAILURE);
  75. mHandler.sendEmptyMessage(CONTENT_STATUS);
  76. e.printStackTrace();
  77. }
  78. }
  79. }).start();
  80. }

3.xUtils框架的post上传数据,表单格式

[java] view plaincopy
  1. /**
  2. * 表单格式传送(键值对)
  3. */
  4. private void xUtilsFrame() {
  5. RequestParams params = new RequestParams();
  6. params.addBodyParameter("romversion", serviceInfoMap.get("romversion"));
  7. params.addBodyParameter("brand", serviceInfoMap.get("brand"));
  8. params.addBodyParameter("model", serviceInfoMap.get("model"));
  9. params.addBodyParameter("device", serviceInfoMap.get("device"));
  10. params.addBodyParameter("imei", serviceInfoMap.get("imei"));
  11. Log.i(TEST_TAG, params.getEntity().toString());
  12. HttpUtils http = new HttpUtils();
  13. http.configCurrentHttpCacheExpiry(1000 * 10);
  14. http.send(HttpMethod.POST, ACTIVATE_PATH, params,
  15. new RequestCallBack<String>() {
  16. @Override
  17. public void onSuccess(ResponseInfo<String> responseInfo) {
  18. Log.i(TEST_TAG, "接收到的结果为---》" + responseInfo.result);
  19. Log.i(TEST_TAG, "请求码为--->" + responseInfo.statusCode);
  20. try {
  21. JSONObject jsonObject = new JSONObject(
  22. responseInfo.result);
  23. Log.i(TEST_TAG, jsonObject.getString("message"));
  24. if (jsonObject.getString("status").equals("1")) {
  25. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  26. mHandler.sendEmptyMessage(SHOW_SUCCESS);
  27. Settings.System.putInt(getContentResolver(),
  28. SETTING_MODIFY_NAME, 1);
  29. } else {
  30. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  31. mHandler.sendEmptyMessage(SHOW_FAILURE);
  32. }
  33. } catch (JSONException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. }
  37. }
  38. @Override
  39. public void onFailure(HttpException error, String msg) {
  40. Toast.makeText(getApplicationContext(), "失败了",
  41. Toast.LENGTH_LONG).show();
  42. }
  43. });
  44. }

4.xUtils框架,json数据格式

[java] view plaincopy
  1. /**
  2. * 发送json字符串
  3. */
  4. private void xUtilsFrame2() {
  5. try {
  6. RequestParams params = new RequestParams();
  7. // 先封装一个JSON对象
  8. JSONObject param = new JSONObject();
  9. param.put("romversion", serviceInfoMap.get("romversion"));
  10. param.put("brand", serviceInfoMap.get("brand"));
  11. param.put("model", serviceInfoMap.get("model"));
  12. param.put("device", serviceInfoMap.get("device"));
  13. param.put("imei", serviceInfoMap.get("imei"));
  14. StringEntity sEntity = new StringEntity(param.toString(), "utf-8");
  15. params.setBodyEntity(sEntity);
  16. Log.i(TEST_TAG, "params-->" + params.toString()); // params-->com.lidroid.xutils.http.RequestParams@41c74e10
  17. Log.i(TEST_TAG, "param-->" + param.toString()); // param-->{"device":"hwG620S-UL00","brand":"HUAWEI","model":"G620S-UL00","imei":"865242024756522","romversion":"G620S-UL00V100R001C17B264"}
  18. Log.i(TEST_TAG, "param-entity-->" + sEntity.toString()); // param-entity-->org.apache.http.entity.StringEntity@41c482f0
  19. HttpUtils http = new HttpUtils();
  20. http.configCurrentHttpCacheExpiry(1000 * 10);
  21. http.send(HttpMethod.POST, ACTIVATE_PATH, params,
  22. new RequestCallBack<String>() {
  23. @Override
  24. public void onSuccess(ResponseInfo<String> responseInfo) {
  25. Log.i(TEST_TAG, "接收到的结果为---》" + responseInfo.result); // 接收到的结果为---》{"status":"2","datatime":1437444596,"message":"参数无效!"}
  26. Log.i(TEST_TAG, "请求码为--->"
  27. + responseInfo.statusCode);
  28. try {
  29. JSONObject jsonObject = new JSONObject(
  30. responseInfo.result);
  31. Log.i(TEST_TAG, jsonObject.getString("message"));
  32. if (jsonObject.getString("status").equals("1")) {
  33. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  34. mHandler.sendEmptyMessage(SHOW_SUCCESS);
  35. Settings.System.putInt(
  36. getContentResolver(),
  37. SETTING_MODIFY_NAME, 1);
  38. } else {
  39. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  40. mHandler.sendEmptyMessage(SHOW_FAILURE);
  41. }
  42. } catch (JSONException e) {
  43. // TODO Auto-generated catch block
  44. e.printStackTrace();
  45. }
  46. }
  47. @Override
  48. public void onFailure(HttpException error, String msg) {
  49. Toast.makeText(getApplicationContext(), "失败了",
  50. Toast.LENGTH_LONG).show();
  51. }
  52. });
  53. } catch (JSONException e1) {
  54. // TODO Auto-generated catch block
  55. e1.printStackTrace();
  56. } catch (UnsupportedEncodingException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. }
  60. }

5.Volley框架:StringRequest,from表单

[java] view plaincopy
  1. /**
  2. * Volley框架:StirngRequest(需要导入Volley.jar包到libs目录下,需要加internet权限)
  3. */
  4. private void volleyFrameSR() {
  5. // 第一步:创建一个RequestQueue对象
  6. final RequestQueue mQueue = Volley.newRequestQueue(this);
  7. // 第二步:创建一个StringRequest对象
  8. StringRequest stringRequest = new StringRequest(Method.POST,
  9. ACTIVATE_PATH, new Response.Listener<String>() {
  10. // 服务器响应成功的回调
  11. @Override
  12. public void onResponse(String response) {
  13. Log.i(TEST_TAG, "返回结果为--->" + response);
  14. try {
  15. JSONObject jsonObject = new JSONObject(response);
  16. Log.i(TEST_TAG,
  17. "status-->"
  18. + jsonObject.getString("status"));
  19. Log.i(TEST_TAG,
  20. "message-->"
  21. + jsonObject.getString("message"));
  22. mQueue.cancelAll("StringRequest");
  23. mHandler.sendEmptyMessage(SHOW_SUCCESS);
  24. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  25. } catch (JSONException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. }
  29. }
  30. }, new Response.ErrorListener() {
  31. // 服务器响应失败的回调
  32. @Override
  33. public void onErrorResponse(VolleyError error) {
  34. Log.e(TEST_TAG, error.getMessage(), error);
  35. mHandler.sendEmptyMessage(SHOW_FAILURE);
  36. }
  37. }) {
  38. @Override
  39. protected Map<String, String> getParams() throws AuthFailureError {
  40. Map<String, String> map = new HashMap<String, String>();
  41. map.put("romversion", serviceInfoMap.get("romversion"));
  42. map.put("brand", serviceInfoMap.get("brand"));
  43. map.put("model", serviceInfoMap.get("model"));
  44. map.put("device", serviceInfoMap.get("device"));
  45. map.put("imei", serviceInfoMap.get("imei"));
  46. Log.i(TEST_TAG, "发送结果为--->" + map.toString());
  47. // 发送结果为--->{device=hwG620S-UL00, brand=HUAWEI,
  48. // model=G620S-UL00, imei=865242024756522,
  49. // romversion=G620S-UL00V100R001C17B264}
  50. return map;
  51. }
  52. };
  53. stringRequest.setTag("StringRequest");
  54. // 第三步:将StringRequest对象添加到RequestQueue里面
  55. mQueue.add(stringRequest);
  56. }

这个写了太多的代码,这是方法的原型:

[java] view plaincopy
  1. StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {
  2. @Override
  3. protected Map<String, String> getParams() throws AuthFailureError {
  4. Map<String, String> map = new HashMap<String, String>();
  5. map.put("params1", "value1");
  6. map.put("params2", "value2");
  7. return map;
  8. }
  9. };

根据我服务器的接受模式,我觉得他发送的结果是form表单格式

6.Volley框架: JsonObjectRequest。

因为它的方法中传递的的请求参数为JsonObject,目前还没有找到传递form格式的方法。

[java] view plaincopy
  1. /**
  2. * Volley框架:JsonObjectRequest
  3. */
  4. private void volleyFrameJR() {
  5. // 第一步:创建一个RequestQueue对象
  6. final RequestQueue mQueue = Volley.newRequestQueue(this);
  7. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
  8. Method.POST, ACTIVATE_PATH, null,
  9. new Response.Listener<JSONObject>() {
  10. @Override
  11. public void onResponse(JSONObject response) {
  12. Log.i(TEST_TAG, "返回结果为--->" + response.toString());
  13. try {
  14. // JSONObject jsonObject = new JSONObject(response);
  15. Log.i(TEST_TAG,
  16. "status-->" + response.getString("status"));
  17. Log.i(TEST_TAG,
  18. "message-->"
  19. + response.getString("message"));
  20. mHandler.sendEmptyMessage(SHOW_SUCCESS);
  21. mHandler.sendEmptyMessage(CLOSE_DIALOG);
  22. } catch (JSONException e) {
  23. // TODO Auto-generated catch block
  24. e.printStackTrace();
  25. }
  26. }
  27. }, new Response.ErrorListener() {
  28. @Override
  29. public void onErrorResponse(VolleyError error) {
  30. Log.e(TEST_TAG, error.getMessage(), error);
  31. mHandler.sendEmptyMessage(SHOW_FAILURE);
  32. }
  33. }) {
  34. @Override
  35. protected Map<String, String> getPostParams()
  36. throws AuthFailureError {
  37. Map<String, String> map = new HashMap<String, String>();
  38. map.put("romversion", serviceInfoMap.get("romversion"));
  39. map.put("brand", serviceInfoMap.get("brand"));
  40. map.put("model", serviceInfoMap.get("model"));
  41. map.put("device", serviceInfoMap.get("device"));
  42. map.put("imei", serviceInfoMap.get("imei"));
  43. Log.i(TEST_TAG, "发送结果为--->" + map.toString());
  44. return map;
  45. }
  46. };
  47. mQueue.add(jsonObjectRequest); // 没有这句就无法交互
  48. }

这种方式应该可以,好像getParams也可以,因为服务器写的不是接受json格式数据,所以我没法测试。

还有就是去掉重写的方法,不管是getPostParams还是getParams,然后将里面的map集合内容写道,new JsonObjectRequest之前,然后在JsonObject  jsonObject = newJsonObject(map),然后将jsonObject作为第三个参数,这样就传递了一个json字符串到服务器。

7.JsonObject和JsonArray

[java] view plaincopy
  1. //JsonObject和JsonArray区别就是JsonObject是对象形式,JsonArray是数组形式
  2. //创建JsonObject第一种方法
  3. JSONObject jsonObject = new JSONObject();
  4. jsonObject.put("UserName", "ZHULI");
  5. jsonObject.put("age", "30");
  6. jsonObject.put("workIn", "ALI");
  7. System.out.println("jsonObject1:" + jsonObject);
  8. //创建JsonObject第二种方法
  9. HashMap<String, String> hashMap = new HashMap<String, String>();
  10. hashMap.put("UserName", "ZHULI");
  11. hashMap.put("age", "30");
  12. hashMap.put("workIn", "ALI");
  13. System.out.println("jsonObject2:" + JSONObject.fromObject(hashMap));
  14. //创建一个JsonArray方法1
  15. JSONArray jsonArray = new JSONArray();
  16. jsonArray.add(0, "ZHULI");
  17. jsonArray.add(1, "30");
  18. jsonArray.add(2, "ALI");
  19. System.out.println("jsonArray1:" + jsonArray);
  20. //创建JsonArray方法2
  21. ArrayList<String> arrayList = new ArrayList<String>();
  22. arrayList.add("ZHULI");
  23. arrayList.add("30");
  24. arrayList.add("ALI");
  25. System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));
  26. //如果JSONArray解析一个HashMap,则会将整个对象的放进一个数组的值中
  27. System.out.println("jsonArray FROM HASHMAP:" + JSONArray.fromObject(hashMap));
  28. //组装一个复杂的JSONArray
  29. JSONObject jsonObject2 = new JSONObject();
  30. jsonObject2.put("UserName", "ZHULI");
  31. jsonObject2.put("age", "30");
  32. jsonObject2.put("workIn", "ALI");
  33. jsonObject2.element("Array", arrayList);
  34. System.out.println("jsonObject2:" + jsonObject2);

system结果:

[html] view plaincopy
  1. jsonObject1:{"UserName":"ZHULI","age":"30","workIn":"ALI"}
  2. jsonObject2:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
  3. jsonArray1:["ZHULI","30","ALI"]
  4. jsonArray2:["ZHULI","30","ALI"]
  5. jsonArray FROM HASHMAP:[{"workIn":"ALI","age":"30","UserName":"ZHULI"}]
  6. jsonObject2:{"UserName":"ZHULI","age":"30","workIn":"ALI","Array":["ZHULI","30","ALI"]}
[html] view plaincopy
  1. </pre><pre name="code" class="html" style="font-size: 13px; margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; line-height: 19.5px; background-color: rgb(254, 254, 242);">
[html] view plaincopy
  1. <span style="font-size:24px;">android读取json数据(遍历JSONObject和JSONArray)</span>
[html] view plaincopy
  1. <pre name="code" class="java">public String getJson(){
  2. String jsonString = "{\"FLAG\":\"flag\",\"MESSAGE\":\"SUCCESS\",\"name\":[{\"name\":\"jack\"},{\"name\":\"lucy\"}]}";//json字符串
  3. try {
  4. JSONObject result = new JSONObject(jsonstring);//转换为JSONObject
  5. int num = result.length();
  6. JSONArray nameList = result.getJSONArray("name");//获取JSONArray
  7. int length = nameList.length();
  8. String aa = "";
  9. for(int i = 0; i < length; i++){//遍历JSONArray
  10. Log.d("debugTest",Integer.toString(i));
  11. JSONObject oj = nameList.getJSONObject(i);
  12. aa = aa + oj.getString("name")+"|";
  13. }
  14. Iterator<?> it = result.keys();
  15. String aa2 = "";
  16. String bb2 = null;
  17. while(it.hasNext()){//遍历JSONObject
  18. bb2 = (String) it.next().toString();
  19. aa2 = aa2 + result.getString(bb2);
  20. }
  21. return aa;
  22. } catch (JSONException e) {
  23. throw new RuntimeException(e);
  24. }
  25. }

8.生成数组json串

我想要生成的json串为:
{
"languages": [//应用市场所支持的语种信息
  {
"name":"汉语",
"code":"hy",
"selected":"true"
  },
  {
"name":"蒙古语",
"code":"mn"
"selected":"false"
  }
],
"applist_versioncode":"0",
"applist_num":"2",
代码如下:
[java] view plaincopy
  1. private void createJsonData() {
  2. try {
  3. // 存放总的json数据的容器
  4. JSONObject jsonObject = new JSONObject();
  5. /*
  6. * 首先,总的josn的第一条的key是languages,他的value是一个数组,数组有两个元素,所以,
  7. * languages对应的value是一个JsonArray对象
  8. */
  9. // 此时生成一个jsonarray来存放language的值的数组
  10. JSONArray jsonArrayLang = new JSONArray();
  11. // 首先将language的第一条数据,生成jsonObject对象
  12. JSONObject joLang0 = new JSONObject();
  13. joLang0.put("name", "汉语");
  14. joLang0.put("code", "hy");
  15. joLang0.put("selected", "true");
  16. // 此时,将数组的第一组数据添加到jsonarray中
  17. jsonArrayLang.put(0, joLang0);
  18. // 首先将language的第二条数据,生成jsonObject对象
  19. JSONObject joLang1 = new JSONObject();
  20. joLang1.put("name", "蒙古语");
  21. joLang1.put("code", "mn");
  22. joLang1.put("selected", "false");
  23. // 此时,将数组的第一组数据添加到jsonarray中
  24. jsonArrayLang.put(1, joLang1);
  25. // 此时,langauge的值已经生成,就是jsonarraylang这个数组格式的数据
  26. // 然后,将其添加到总的jsonobject中
  27. jsonObject.put("languages", jsonArrayLang);
  28. // 添加总jsonobject容器的第二条数据,"applist_versioncode":"0",
  29. jsonObject.put("applist_versioncode", "0");
  30. // 添加总jsonobject容器的第三条数据,"applist_num":"2",
  31. jsonObject.put("applist_num", "2");
  32. System.out.println(jsonObject.toString());
  33. } catch (JSONException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. }
  37. }

最后输出结果为

9.修改json串(带数组)

[java] view plaincopy
  1. String stt = "{\"languages\":[{\"name\":\"汉语\",\"code\":\"hy\"},"
  2. + "{\"name\":\"蒙古语\",\"code\":\"mn\"}]}";
[java] view plaincopy
  1. <span style="white-space:pre">                </span>try {
  2. JSONObject jsonObject = new JSONObject(stt);
  3. System.out.println("修改之前---->" + jsonObject.toString());
  4. JSONArray jsonArray = jsonObject.getJSONArray("languages");
  5. System.out.println("修改之前---->" + jsonArray.toString());
  6. System.out.println("jsonArray.length()---->"
  7. + jsonArray.length());
  8. for (int i = 0; i < jsonArray.length(); i++) {
  9. JSONObject jsonObject2 = (JSONObject) jsonArray.opt(i);
  10. System.out.println("jsonObject2---->" + i + "-----"
  11. + jsonArray.toString());
  12. if (i == (jsonArray.length() - 1)) {
  13. System.out.println("修改之前---->");
  14. jsonObject2.put("name", "法国与");
  15. jsonArray.put(i, jsonObject2);
  16. }
  17. }
  18. jsonArray.put(jsonArray.length(),
  19. (JSONObject) jsonArray.opt(jsonArray.length() - 1));
  20. jsonObject.put("languages", jsonArray);
  21. System.out.println("修改之后---->" + jsonObject.toString());
  22. } catch (JSONException e) {
  23. e.printStackTrace();
  24. }

修改json串,就需要一层一层读出来,然后key值存在的时候,直接put新值,就会直接替换掉,然后在一层一层添加回去。这样就可以了

android与服务器交互总结(json,post,xUtils,Volley)相关推荐

  1. Android前后端交互细节--Json转化为对象的原理

    移动互联网用户基数越来越大,除了一些工具类(指南针.手电筒等)的应用,绝大部分APP都需要与后端进行交互. 交互的数据格式有JSON.XML等,由于JSON具有语法简单.占用空间小等优势,基本所有的公 ...

  2. Android 使用JSON格式与服务器交互 中文乱码问题解决

    Android 使用JSON格式与服务器交互 中文乱码问题解决 参考文章: (1)Android 使用JSON格式与服务器交互 中文乱码问题解决 (2)https://www.cnblogs.com/ ...

  3. Android之使用HttpPost提交数据到服务器(Android手机客户端和后台服务器交互)

    这是一个小型的数据交互案例,即Android手机客户端和后台服务器交互(数据库mysql) 服务器端 首先服务器端数据库(用户名root密码123456),db_student.sql数据库表user ...

  4. android 访问服务器josn文件,Android客户端对服务器回来的json文件进行解析

    Android客户端对服务器返回的json文件进行解析 和解析XML的方式大同小异,只有解析方式存在区别: /** * 解析服务器返回来的json数据 * @param content * @retu ...

  5. android json传输数据到服务器,Android中post请求传递json数据给服务端的实例

    在最近的项目中有个需求是这样的: 入参封装成JSON,EXAMPLE: { "uuid": "iamauuid", "clientType" ...

  6. Android的服务器搭建

    网络 有网络就要有服务器 创建Web工程--选择动态工程 配置tomcat7--最好自己的JDK的版本保持一致 如果你下载的版本是tomcat6的话,就只能用6了. 填写工程的名称. 这时,要点击Ne ...

  7. android:服务器与客户端的双向开发

    [Android 开发]: Android客户端与服务端之间使用JSON交互数据. 分类: [Android 开发] Androidjava webJSONhttp协议服务端 在前面的两讲中,我们讲解 ...

  8. android post json格式,Android中post请求传递json数据给服务端的实例

    在最近的项目中有个需求是这样的: 入参封装成JSON,EXAMPLE: { "uuid": "iamauuid","clientType": ...

  9. Tomact和MySql搭建android简单服务器

    之前已经写了怎么搭建eclipse加tomcat整合成服务器环境,如果有人不知道怎么配置,可以看我的那篇博客. 现在环境搭配好的情况下,在eclipse里新建一个Web工程,在src包下新建一个ser ...

最新文章

  1. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name
  2. 一个在菜场看到的,神一般的大爷!
  3. 值得二刷的让MySQL性能“飞起来”的方法总结
  4. 最多两次股票交易-Best Time to Buy and Sell Stock III
  5. html中的点击事件
  6. 微信利用PHP创建自定义菜单的方法
  7. c java json_cJSON_json包的C语言解析库
  8. IDEA开发vue.js卡顿
  9. P3146 [USACO16OPEN]248 P3147 [USACO16OPEN]262144
  10. topcon gps 软件下载
  11. 资讯--2019年4月
  12. matlab 三维图形改变线宽,用PANDAS改变线宽绘制三维线图
  13. TCP的SYN报文可以携带payload吗?
  14. 树莓派和电脑之间串口通信
  15. Linux系统入门学习
  16. Java高级类特性(二)
  17. 计算机专业注意身体,请注意身体 长时间使用电脑对身体的危害
  18. 吴恩达机器学习第一周测试
  19. ImageJ自动测量每个细胞平均荧光强度及批量处理多张图片
  20. Java名词解释什么是继承_java程序设计名词解释

热门文章

  1. js数字比较【牢记】
  2. 分布式实时分析数据库citus数据插入性能优化
  3. sql server 2000能否得到一个表的最后更新日期?
  4. vmware虚拟化之vswitch详细资料
  5. 2012-11-6 2个月小结
  6. 解析含有资源类型的字符串
  7. 经典仿句100例_(完整版)精美句子仿写100例
  8. View的draw onDraw dispatchDraw顺序
  9. 执行jar包中的某个类
  10. androidpn的学习研究(一)androidpn-server服务端相关配置的常识