編輯:關於Android編程
在上篇文章中我們提到在Android開發中經常用到xml文件,當然跟服務器打交道,大部分還是喜歡用Json數據。
Json的定義:
一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性。
JSON Vs XML
1.JSON和XML的數據可讀性基本相同
2.JSON和XML同樣擁有豐富的解析手段
3.JSON相對於XML來講,數據的體積小
4.JSON與JavaScript的交互更加方便
5.JSON對數據的描述性比XML較差
6.JSON的速度要遠遠快於XML
Json解析類涉及的類:
JSONObject:可以看作是一個json對象,這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。它對外部(External: 應用toString()方法輸出的數值)調用的響應體現為一個標准的字符串(例如:{“JSON”: “Hello, World”},最外被大括號包裹,其中的Key和Value被冒號”:”分隔)。其對於內部(Internal)行為的操作格式略微,例如:初始化一個JSONObject實例,引用內部的put()方法添加數值:new JSONObject().put(“JSON”, “Hello, World!”),在Key和Value之間是以逗號”,”分隔。Value的類型包括:Boolean、JSONArray、JSONObject、Number、String或者默認值JSONObject.NULL object 。
JSONStringer:json文本構建類 ,根據官方的解釋,這個類可以幫助快速和便捷的創建JSON text。其最大的優點在於可以減少由於 格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。。其最大的優點在於可以減少由於格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。
JSONArray:它代表一組有序的數值。將其轉換為String輸出(toString)所表現的形式是用方括號包裹,數值以逗號”,”分隔(例如: [value1,value2,value3],大家可以親自利用簡短的代碼更加直觀的了解其格式)。這個類的內部同樣具有查詢行為, get()和opt()兩種方法都可以通過index索引返回指定的數值,put()方法用來添加或者替換數值。同樣這個類的value類型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默認值JSONObject.NULL object。
JSONTokener:json解析類
JSONException:json中用到的異常
那就來干起來吧。
用到的Json數據:
{ name:張三,
age:26,
phone:[131,132],
score:{語文:100,數學:60,理綜:{化學:120,物理:150}}
}
其實大家看到這個Json數據應該不難,因為看起來就覺得不是很難嘛,對的,那我來給大家個訣竅:
①見到大括號 {} 就轉成 JSONObject
②見到中括號 [] 就轉成 JSONArray
③JSONObject 獲得值使用 getType(key) type為Booeal 、Int 、String …..
④JSONArray 獲得值要使用下標
那就來寫寫:
解析有兩種方式都可以:使用 JSONObect 和 使用 JSONToken
布局文件:
activity_main.xml
MainActivity.java
public class MainActivity extends Activity {
private TextView tv;
//JSON數據
public static final String JSONDATA = "{name:張三 ,age:26,phone:[131,132],score:{語文:100,數學:60,理綜:{化學:120,物理:150}}}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
public void btn(View view) {
try {
StringBuffer stringBuffer = new StringBuffer();
//解析有兩種方式:JSONObject和JSONToken
//第一種方式
//最外層的JSONObject
// JSONObject jsonObject = new JSONObject(JSONDATA);
//第二種方式
//1.最外層的JSONObject
JSONTokener jsonTokener = new JSONTokener(JSONDATA);
JSONObject jsonObject = (JSONObject) jsonTokener.nextValue();
//取值
stringBuffer.append("name" + jsonObject.getString("name") + "\n");
stringBuffer.append("age" + jsonObject.getString("age") + "\n");
//2.phone那個JSONArray
JSONArray phoneArray = jsonObject.getJSONArray("phone");
//取值
stringBuffer.append("phone" + phoneArray.getString(0) + " "
+ phoneArray.getString(1) + "\n");
//3.score那個JSONObject
JSONObject scoreObject = jsonObject.getJSONObject("score");
//取值
stringBuffer.append("語文" + scoreObject.getString("語文") + " "
+ "數學" + scoreObject.getString("數學") + " ");
//4.理綜那個JSONObject
JSONObject lizongObject = scoreObject.getJSONObject("理綜");
//取值
stringBuffer.append("化學" + lizongObject.getString("化學") + " "
+ "物理" + lizongObject.getString("物理") + "\n");
//將解析的數據顯示到TextView上
tv.setText(stringBuffer.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
效果:
看看是不是很簡單呢,趕緊試試
**注:
JSON數據的格式不要寫錯了,注意中英輸入法,尤其是標點,不然解析不出來的哦。**
Android ADB 用法adb 全稱是 Android Debug Bridge, 就是起到調試橋的作用。 用來操作android設備的閱讀目錄 adb
細心的小伙伴可能都現了微信下拉沒有小視頻功能只顯示微信圖標,最新版本的微信下拉不能拍小視頻啦,這是什麼原因呢?如果你還在疑惑微信下拉小視頻怎麼沒有了這個問題
一、知識點講解當我們點擊系統自帶的按鈕時,按鈕的外觀會發生變化。上篇博文中我們畫了一個三角形按鈕,但點擊還不能變色,下面我們就來實現點擊變色功能。從知識體系上我們需要了解
基本布局演示1. 定義包含GridView 的 main.xmk<?xml version=1.0 encoding=utf-8?><L