1. 程式人生 > >通過開源框架AsyncHttpClient獲取Json資料

通過開源框架AsyncHttpClient獲取Json資料

json簡介

Json詳細解析可見 http://redarmychen.iteye.com/blog/980243

JSONJavaScript Object Notation的縮寫,可見JSON來源於JavaScriptJSON資料是一系列鍵值對的集合。

下面的程式碼就是一個JSON
{   
"phone" : ["12345678", "87654321"], // 陣列   
"name" : "tianjiefeng", // 字串   
"age" : 100, // 數值   
"address" : { "country" : "china", "province" : "jiangsu" }, // JSON物件   


"married" : false // 布林值   

JSON是以key/value的形式存在的,keyStrng型別的,value的型別可以是一個數組,可以是一個字串,可以是一個數值,也可以是一個布林值,甚至可以是一個JSON物件

我們對json有一定了解之後,接下來,讓我們來了解android中對json的解析

同樣我們和之前專案類似。採用開源框架來編寫程式。

解析json資料步驟:

1.引入jar檔案

2.新增網路許可權

3.建立客戶端物件

4.處理get請求,在get請求中newJsonHttpResponseHandler物件

5.返回JSONObject物件或者JSONOArray物件(JSONOArray物件遍歷json陣列

6.JSONObject物件get(“屬性名”),getString(“屬性名”),getInt(“屬性名”)等方法來獲取指定屬性名的值

具體例項:

1.引入jar檔案

 

2.新增訪問網路許可權

<uses-permission android:name="android.permission.INTERNET"/>

3.Activity主要程式碼:程式碼中有詳細註釋,請認真觀看

  1. package com.example.android_json;  
  2. import org.apache.http.Header;  
  3. import org.json.JSONArray;  
  4. import org.json.JSONException;  
  5. import org.json.JSONObject;  
  6. import com.loopj.android.http.AsyncHttpClient;  
  7. import com.loopj.android.http.JsonHttpResponseHandler;  
  8. import android.os.Bundle;  
  9. import android.app.Activity;  
  10. import android.view.Menu;  
  11. import android.widget.Toast;  
  12. publicclass MainActivity extends Activity {  
  13.     @Override
  14.     protectedvoid onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         // http://172.16.237.200:8080/video/JsonServlet
  18.         initData();  
  19.     }  
  20.     privatevoid initData() {  
  21.         // 建立客戶端物件
  22.         AsyncHttpClient client = new AsyncHttpClient();  
  23.         String url = "http://172.16.237.200:8080/video/JsonServlet";  
  24.         Toast.makeText(this"傳送請求到伺服器"0).show();  
  25.         client.get(url, new JsonHttpResponseHandler() {  
  26.             //返回JSONObject物件|JSONOArray物件
  27.             @Override
  28.             publicvoid onSuccess(int statusCode, Header[] headers,  
  29.                     JSONArray response) {  
  30.                 // TODO Auto-generated method stub
  31.                 super.onSuccess(statusCode, headers, response);  
  32.                 if (statusCode == 200) {  
  33.                     //遍歷json陣列
  34.                     for (int i = 0; i < response.length(); i++) {  
  35.                         try {  
  36.                             // 獲取具體的一個JSONObject物件
  37.                             JSONObject obj = response.getJSONObject(i);  
  38.                             //JSONObject物件get(“屬性名”),getString(“屬性名”),getInt(“屬性名”)等方法來獲取指定屬性名的值
  39.                             System.out.println("序號" + obj.getString("id")  
  40.                                     + "--------姓名:" + obj.getString("name")  
  41.                                     + "--------密碼:" + obj.getString("pass")  
  42.                             + "--------其他:" + obj.getString("pass"));  
  43.                         } catch (JSONException e) {  
  44.                             // TODO Auto-generated catch block
  45.                             e.printStackTrace();  
  46.                         }  
  47.                     }  
  48.                 }  
  49.             }  
  50.         });  
  51.     }  
  52. }  


在控制檯輸出結果:

 

常見錯誤錦籍:

一、當遍歷json陣列是,若沒有對於json資料就會報錯

例如:

  1. //遍歷json陣列
  2. for (int i = 0; i < response.length(); i++) {  
  3.     try {  
  4.         // 獲取具體的一個JSONObject物件
  5.         JSONObject obj = response.getJSONObject(i);  
  6.         //JSONObject物件get(“屬性名”),getString(“屬性名”),getInt(“屬性名”)等方法來獲取指定屬性名的值
  7.         System.out.println("序號" + obj.getString("id")  
  8.                 + "--------姓名:" + obj.getString("name")  
  9.                 + "--------性別:" + obj.getString("sex")  
  10.                 + "--------密碼:" + obj.getString("pass"));  
  11.     } catch (JSONException e) {  
  12.         // TODO Auto-generated catch block
  13.         e.printStackTrace();  
  14.     }  
  15. }  

執行效果如下

 

解析:json檔案中沒有sex欄位,若我 們在程式中寫入則會報如上錯誤,所有在編寫程式的時候應多加註意欄位的對應。

相關推薦

通過開源框架AsyncHttpClient獲取Json資料

json簡介 Json詳細解析可見 http://redarmychen.iteye.com/blog/980243 JSON是JavaScript Object Notation的縮寫,可見JSON來源於JavaScript。JSON資料是一系列鍵值對的集合。 下面

通過JAVA從高德地圖URL連接獲取json資料 解析並存入資料庫的程式舉例

首先 進入高德開放平臺 按官網教程獲取key 這裡以杭州某區域車站資訊舉例 通過線上解析工具獲取json格式的資料 通過此資料建立實體類 package geturl; import java.util.List; public class JsonBean

jsTree 通過ajax 獲取json資料 載入樹形選單

var ajaxTreeSample = function() { $("#tree_4").jstree({ "core" : { "themes" : { "

Spring 3.2.* MVC通過Ajax獲取JSON資料報406錯誤

Spring 3.2.x通過@ResponseBody標籤返回JSON資料的方法都報406錯: Failed to load resource: the server responded with a status of 406 (Not Acceptable) 以及報錯描述: The resource i

Python Web框架 flask post JSON資料獲取方式總結

提交任務: curl -i -H "Content-Type: application/json" -X POST -d '{"appIds": [ {"appid": "1076877374"},

AngularJS學習筆記(3)——通過Ajax獲取JSON資料

通過Ajax獲取JSON資料 以我之前寫的與使用者互動的動態清單列表為例,使用JSON前todo.html程式碼如下: <!DOCTYPE html> <html ng-app="todoApp"> <head>

關於Struts2框架下回傳JSON資料被打斷的問題

在struts2的返回結果集做出瞭如下配置: <package name="easyUIorder" extends="json-default"> <action name="queryList2" class="orderAction" metho

SpringMvc+Spring4+hibernate框架 ajax提交JSON資料Controller接收

jsp頁面程式碼: $.ajax({             type: "POST",             url: "revise/modifyPass",

Java如何獲取JSON資料中的值

場景:在介面自動化場景中,下個介面傳送的請求引數,依賴上個介面請求結果中的值。需要將獲取值作為全域性引數引用。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io

Django中通過指令碼的方式將json資料寫入資料庫

      這裡記錄一下django中通過指令碼的方式寫入json資料的一些技巧。       通過指令碼不僅可以將已有的json資料寫入資料庫,而且可以批量地模擬一些後臺資料,方便進行頁面的展示。    

獲取JSON資料的方法

json資料的獲取有很多方法,主要細說一下ajax獲取的方法。 json檔案內容(item.json) [ { “name”:“張國立”, “sex”:“男”, “email”:"[email protected]", “url”:"./img/1.jpg" }, {

利用Ajax獲取JSON資料

JSON物件與JSON字串的相互轉換 //JSON物件 屬性名必須使用雙引號包起來 var obj={"a":1,"b":2}; var ary=[{"a":1,"b":2},{"a":10,"b":20},{"a":100,"b":200}]; //JSON字串:將JS

for in 迴圈獲取json資料中'key'與'value'

 一、for in 方法  a.for in 迴圈物件 var data = {name:'mcYang0929',age:'25',sex:'man'}; for(var key in data) { console.log(key); //

c# post請求獲取json資料

        /// <summary>         /// get http請求獲取位置資訊         /// </summary>         interna

Android開源框架AsyncHttpClient android async http 使用

                    android-async-http 開源框架可以使我們輕鬆地獲取網路資料或者向伺服器傳送資料,最關鍵的是,它是非同步框架,在底層使用執行緒池處理併發請求,效率很高,使用又特別簡單。    以往我們在安卓上做專案,比如要下載很多圖片、網頁或者其他的資源,多數開發者會選擇

springMvc接收Http請求獲取Json資料

1、用httpServletRequest接收引數,用流的方式讀取body } 2、用spring封裝的@RequestBody JSONObject直接獲取http請求中的Body資料,要求      1).http請求中的ContentType必須為applic

fetch獲取json資料

事例: data.json是同目錄的json檔案 fetch('data.json', { method:'GET', mode:'cors',// 避免cors攻擊 credentials: 'include' }).then(functi

Java從網路中請求獲取JSon資料以及解析JSON資料----(自創,請註明)

 Json資料是比較常用的資料型別解析,優點就不多說啦。來看看方法: public static JSONObject getJsonObject(String url) { JSONObjec

android從assets中獲取json資料

1.首先是匯入json檔案 [ { "actual": "103", "createTime": "Apr 10, 2017 12:04:14 AM", "economicId": 518, "forecast":

android客戶端從伺服器端獲取json資料並解析的實現程式碼

package com.nuoter.adapterUntil;    import java.util.HashMap;  import java.util.List;    import android.content.Context;  import android.graphics.Bitmap;