Android App中讀取XML與JSON格式數(shù)據(jù)的基本方法示例
XML
假如有這樣一個(gè)XML格式的數(shù)據(jù):
<?xml version="1.0" encoding="utf-8"?> <resources> <customer name="luopeng" age="21" gender="1" emial="dylankeepmoving@163.com"/> <customer name="dylan" age="22" gender="2" emial="710097663@qq.com"/> <customer name="android" age="6" gender="2" emial="android@gmail.com"/> </resources>
下面我們來(lái)編寫(xiě)一個(gè)類來(lái)讀取,此類的作用是點(diǎn)擊按鈕后在EditView上顯示資源文件(一個(gè)XML)中的內(nèi)容,此例中會(huì)使用到XMLResourceParser
public class TestXmlResourceParserActivity extends Activity {
private EditText et;
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 變量在內(nèi)部類中使用的前提是此變量必須是final修飾的
myButton = (Button) this.findViewById(R.id.btn01);
et = (EditText) this.findViewById(R.id.edittext01);
myButton.setOnClickListener(new OnClickListener() {
StringBuilder sb = new StringBuilder("");
Resources res = getResources();
XmlResourceParser xrp = res.getXml(R.xml.test);
@Override
public void onClick(View v) {
int counter = 0;
try {
// 判斷是否到了文件的結(jié)尾
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
//文件的內(nèi)容的起始標(biāo)簽開(kāi)始,注意這里的起始標(biāo)簽是test.xml文件里面<resources>標(biāo)簽下面的第一個(gè)標(biāo)簽
if (xrp.getEventType() == XmlResourceParser.START_TAG) {
String tagname = xrp.getName();
if (tagname.endsWith("customer")) {
counter++;
sb.append("這是第" + counter + "客戶"+"\n");
sb.append("姓名:"+xrp.getAttributeValue(0)+"\n");
sb.append("年齡:"+xrp.getAttributeValue(1)+"\n");
sb.append("性別:"+xrp.getAttributeValue(2)+"\n");
sb.append("郵箱:"+xrp.getAttributeValue(3)+"\n\n");
}
}
xrp.next();
}
et.setText(sb.toString());
} catch (XmlPullParserException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
JSON
創(chuàng)建JSON數(shù)據(jù)
try {
//首先創(chuàng)建對(duì)象中的一個(gè)單個(gè)鍵值對(duì)
JSONObject root = new JSONObject();
root.put("cat", "it");
//另一個(gè)鍵值對(duì)的值是一個(gè)數(shù)組,數(shù)組里裝了3個(gè)JSON對(duì)象,所以再分別搞3個(gè)JSONObject對(duì)象存放鍵值對(duì)
JSONObject lan1 = new JSONObject();
lan1.put("id", "1");
lan1.put("ide", "Eclipse");
lan1.put("name","Java");
JSONObject lan2 = new JSONObject();
lan2.put("id", "2");
lan2.put("ide", "XCode");
lan2.put("name","Swift");
JSONObject lan3 = new JSONObject();
lan3.put("id", "2");
lan3.put("ide", "Visual Studio");
lan3.put("name","C#");
//在將這3個(gè)對(duì)象存入一個(gè)數(shù)組
JSONArray array = new JSONArray();
array.put(lan1);
array.put(lan2);
array.put(lan3);
//再將數(shù)組作為鍵"languages"的值,構(gòu)成一個(gè)對(duì)象
root.put("languages", array);
//本例中只將內(nèi)容輸出出來(lái)
System.out.println(root.toString());
} catch (JSONException e) {
e.printStackTrace();
}
讀取JSON數(shù)據(jù)
assets/test.json
{
"languages":[
{"id":1,"ide":"Eclipse","name":"Java"},
{"id":2,"ide":"XCode","name":"Swift"},
{"id":3,"ide":"Visual Studio","name":"C#"},
],
"cat","it"
}
try {
InputStream is = getResources().getAssets().open("test.json");
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
//將文本中的數(shù)據(jù),都讀取到一個(gè)StringBuilder當(dāng)中
String line;
StringBuilder builder = new StringBuilder();
while((line=br.readLine()) != null ){
builder.append(line);
}
br.close();
isr.close();
JSONObject root = new JSONObject(builder.toString());
//根據(jù)鍵,獲得鍵對(duì)應(yīng)的值,由于值是String類型,所以用getString
System.out.println("cat="+root.getString("cat"));
//根據(jù)鍵,獲得鍵對(duì)應(yīng)的數(shù)組,由于值是一個(gè)數(shù)組,所以用getJSONArray
JSONArray array = root.getJSONArray("languages");
//由于要遍歷數(shù)組,所以創(chuàng)建一個(gè)for循環(huán)
for(int i=0; i < array. length(); i++){
//由于每一個(gè)數(shù)組當(dāng)中的元素,也是一個(gè)新的JSON對(duì)象
JSONObject lan = array.getJSONObject(i);
System.out.println("-------------------");
System.out.println("id="+lan.getInt("id"));
System.out.println("ide="+lan.getString("name"));
System.out.println("name="+lan.getString("name"));
Log.i("tag","-------");
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
相關(guān)文章
React Native學(xué)習(xí)之Android的返回鍵BackAndroid詳解
這篇文章主要給大家介紹了關(guān)于React Native學(xué)習(xí)之Android的返回鍵BackAndroid的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用React Native具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2017-10-10
詳解Android平臺(tái)JSON預(yù)覽(JSON-handle)
這篇文章主要介紹了Android平臺(tái)JSON預(yù)覽(JSON-handle),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
listview 選中高亮顯示實(shí)現(xiàn)方法
當(dāng)點(diǎn)擊左側(cè)ListView后,選中的一行就會(huì)一直呈高亮狀態(tài)顯示,圖中選中行字的顏色顯示為藍(lán)色(注意:是選中行后一直高亮,而不是只是點(diǎn)擊時(shí)高亮),如果再次點(diǎn)擊另外的一行, 則新的那一行就高亮,下面就來(lái)實(shí)現(xiàn)這個(gè)高亮效果的顯示2012-11-11
Android實(shí)現(xiàn)伸縮彈力分布菜單效果的示例
本文介紹下在Android中實(shí)現(xiàn)伸縮彈力分布菜單效果。這種效果比較炫酷,有需要的朋友可以參考一下。2016-10-10

