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(); }