Android App中读取XML与JSON格式数据的基本方法示例
XML
假如有这样一个XML格式的数据:
<?xmlversion="1.0"encoding="utf-8"?> <resources> <customername="luopeng"age="21"gender="1"emial="dylankeepmoving@163.com"/> <customername="dylan"age="22"gender="2"emial="710097663@qq.com"/> <customername="android"age="6"gender="2"emial="android@gmail.com"/> </resources>
下面我们来编写一个类来读取,此类的作用是点击按钮后在EditView上显示资源文件(一个XML)中的内容,此例中会使用到XMLResourceParser
publicclassTestXmlResourceParserActivityextendsActivity{
privateEditTextet;
privateButtonmyButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//变量在内部类中使用的前提是此变量必须是final修饰的
myButton=(Button)this.findViewById(R.id.btn01);
et=(EditText)this.findViewById(R.id.edittext01);
myButton.setOnClickListener(newOnClickListener(){
StringBuildersb=newStringBuilder("");
Resourcesres=getResources();
XmlResourceParserxrp=res.getXml(R.xml.test);
@Override
publicvoidonClick(Viewv){
intcounter=0;
try{
//判断是否到了文件的结尾
while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){
//文件的内容的起始标签开始,注意这里的起始标签是test.xml文件里面<resources>标签下面的第一个标签
if(xrp.getEventType()==XmlResourceParser.START_TAG){
Stringtagname=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(XmlPullParserExceptione){
}catch(IOExceptione){
e.printStackTrace();
}
}
});
}
JSON
创建JSON数据
try{
//首先创建对象中的一个单个键值对
JSONObjectroot=newJSONObject();
root.put("cat","it");
//另一个键值对的值是一个数组,数组里装了3个JSON对象,所以再分别搞3个JSONObject对象存放键值对
JSONObjectlan1=newJSONObject();
lan1.put("id","1");
lan1.put("ide","Eclipse");
lan1.put("name","Java");
JSONObjectlan2=newJSONObject();
lan2.put("id","2");
lan2.put("ide","XCode");
lan2.put("name","Swift");
JSONObjectlan3=newJSONObject();
lan3.put("id","2");
lan3.put("ide","VisualStudio");
lan3.put("name","C#");
//在将这3个对象存入一个数组
JSONArrayarray=newJSONArray();
array.put(lan1);
array.put(lan2);
array.put(lan3);
//再将数组作为键"languages"的值,构成一个对象
root.put("languages",array);
//本例中只将内容输出出来
System.out.println(root.toString());
}catch(JSONExceptione){
e.printStackTrace();
}
读取JSON数据
assets/test.json
{
"languages":[
{"id":1,"ide":"Eclipse","name":"Java"},
{"id":2,"ide":"XCode","name":"Swift"},
{"id":3,"ide":"VisualStudio","name":"C#"},
],
"cat","it"
}
try{
InputStreamis=getResources().getAssets().open("test.json");
InputStreamReaderisr=newInputStreamReader(is,"UTF-8");
BufferedReaderbr=newBufferedReader(isr);
//将文本中的数据,都读取到一个StringBuilder当中
Stringline;
StringBuilderbuilder=newStringBuilder();
while((line=br.readLine())!=null){
builder.append(line);
}
br.close();
isr.close();
JSONObjectroot=newJSONObject(builder.toString());
//根据键,获得键对应的值,由于值是String类型,所以用getString
System.out.println("cat="+root.getString("cat"));
//根据键,获得键对应的数组,由于值是一个数组,所以用getJSONArray
JSONArrayarray=root.getJSONArray("languages");
//由于要遍历数组,所以创建一个for循环
for(inti=0;i<array.length();i++){
//由于每一个数组当中的元素,也是一个新的JSON对象
JSONObjectlan=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(IOExceptione){
e.printStackTrace();
}catch(JSONExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}