Android 与 web后台数据交互之解析XML和JSON

来源:互联网 发布:美工需要学哪些东西 编辑:程序博客网 时间:2024/06/06 11:05

Android 与 web后台数据交互之解析XML和JSON

转载至 :http://blog.csdn.net/a985548426/article/details/76163408

思维导图:


           Android的网络编程中去拿服务器的数据,一般只采用两种方式。XML和Json,所以今天我们简单做一个案列示范,

其他复杂的都离不开这最基础的步骤。

效果图:

布局:


输出结果:

 xml解析


json解析


  第一步:我们需要xml文件和JSON文件(源文件放在服务器上面)(实际项目开发中我们是动态生成的) 

 

①student.xml

[html] view plain copy
print?
  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2.  <students>  
  3.      <student sid=“1”>  
  4.       <sname>码农01</sname>  
  5.       <sage>101</sage>  
  6.      </student>  
  7.        <student sid=“2”>  
  8.       <sname>码农02</sname>  
  9.       <sage>102</sage>  
  10.      </student>  
  11.        <student sid=“3”>  
  12.       <sname>码农03</sname>  
  13.       <sage>103</sage>  
  14.      </student>  
  15.  </students>  
<?xml version="1.0" encoding="UTF-8"?> <students>     <student sid="1">      <sname>码农01</sname>      <sage>101</sage>     </student>       <student sid="2">      <sname>码农02</sname>      <sage>102</sage>     </student>       <student sid="3">      <sname>码农03</sname>      <sage>103</sage>     </student> </students>


②students.json

[plain] view plain copy
print?
  1. {“count”:3,”students”:[{“sid”:1,”sname”:”小小”,”ssex”:”女”},{“sid”:2,”sname”:”小码”,”ssex”:”男”},{“sid”:3,”sname”:”小农”,”ssex”:”男”}]}  
{"count":3,"students":[{"sid":1,"sname":"小小","ssex":"女"},{"sid":2,"sname":"小码","ssex":"男"},{"sid":3,"sname":"小农","ssex":"男"}]}

第二步: 写好布局文件

[html] view plain copy
print?
  1. <?xml version=“1.0” encoding=“utf-8”?>  
  2. <LinearLayout  
  3.     xmlns:android=“http://schemas.android.com/apk/res/android”  
  4.     xmlns:app=“http://schemas.android.com/apk/res-auto”  
  5.     xmlns:tools=“http://schemas.android.com/tools”  
  6.     android:layout_width=“match_parent”  
  7.     android:layout_height=“match_parent”  
  8.     android:orientation=“vertical”  
  9.     tools:context=“com.example.android31_xmlorjson.MainActivity”>  
  10.   
  11.   
  12.     <Button  
  13.         android:layout_width=“match_parent”  
  14.         android:layout_height=“wrap_content”  
  15.         android:text=“获取网络xml”  
  16.         android:onClick=“getNetXml”  
  17.         />  
  18.     <Button  
  19.         android:layout_width=“match_parent”  
  20.         android:layout_height=“wrap_content”  
  21.         android:text=“获取网络JSON”  
  22.         android:onClick=“getNetJSON”  
  23.         />  
  24.   
  25.   
  26. </LinearLayout>  
<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.android31_xmlorjson.MainActivity">    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="获取网络xml"        android:onClick="getNetXml"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="获取网络JSON"        android:onClick="getNetJSON"        /></LinearLayout>


第三步:核心处理类

注意:

 1、手机获取服务端数据需要在AndroidManifest.xml配上权限

[html] view plain copy
print?
  1. <!–网络权限–>  
  2. <uses-permission android:name=“android.permission.INTERNET”></uses-permission>  
<!--网络权限--><uses-permission android:name="android.permission.INTERNET"></uses-permission>
2、JSON解析所需要用的实体类

BigObject.Java

[java] view plain copy
print?
  1. package com.example.android31_xmlorjson;  
  2.   
  3. import java.util.List;  
  4.   
  5. /** 
  6.  * Created by Administrator on 2017/7/26 0026. 
  7.  */  
  8.   
  9. public class BigObject {  
  10.     private int count;  
  11.     private List<Student> students;  
  12.   
  13.     public BigObject() {  
  14.     }  
  15.     public BigObject(int count, List<Student> students) {  
  16.         this.count = count;  
  17.         this.students = students;  
  18.     }  
  19.     public void setCount(int count) {  
  20.         this.count = count;  
  21.     }  
  22.   
  23.     public void setStudents(List<Student> students) {  
  24.         this.students = students;  
  25.     }  
  26.   
  27.     public int getCount() {  
  28.         return count;  
  29.     }  
  30.   
  31.     public List<Student> getStudents() {  
  32.         return students;  
  33.     }  
  34.   
  35.   
  36. }  
package com.example.android31_xmlorjson;import java.util.List;/** * Created by Administrator on 2017/7/26 0026. */public class BigObject {    private int count;    private List<Student> students;    public BigObject() {    }    public BigObject(int count, List<Student> students) {        this.count = count;        this.students = students;    }    public void setCount(int count) {        this.count = count;    }    public void setStudents(List<Student> students) {        this.students = students;    }    public int getCount() {        return count;    }    public List<Student> getStudents() {        return students;    }}
student.java
[java] view plain copy
print?
  1. package com.example.android31_xmlorjson;  
  2.   
  3. /** 
  4.  * Created by Administrator on 2017/7/26 0026. 
  5.  */  
  6.   
  7. public class Student {  
  8.     private int sid;  
  9.     private String sname;  
  10.     private String ssex;  
  11.   
  12.     public Student() {  
  13.   
  14.     }  
  15.   
  16.     public Student(int sid, String sname, String sex) {  
  17.         this.sid = sid;  
  18.         this.sname = sname;  
  19.         this.ssex = ssex;  
  20.     }  
  21.   
  22.     public void setSid(int sid) {  
  23.         this.sid = sid;  
  24.     }  
  25.   
  26.     public void setSname(String sname) {  
  27.         this.sname = sname;  
  28.     }  
  29.   
  30.     public void setSsex(String ssex) {  
  31.         this.ssex = ssex;  
  32.     }  
  33.   
  34.     public int getSid() {  
  35.         return sid;  
  36.     }  
  37.   
  38.     public String getSname() {  
  39.         return sname;  
  40.     }  
  41.   
  42.     public String getSsex() {  
  43.         return ssex;  
  44.     }  
  45. }  
package com.example.android31_xmlorjson;/** * Created by Administrator on 2017/7/26 0026. */public class Student {    private int sid;    private String sname;    private String ssex;    public Student() {    }    public Student(int sid, String sname, String sex) {        this.sid = sid;        this.sname = sname;        this.ssex = ssex;    }    public void setSid(int sid) {        this.sid = sid;    }    public void setSname(String sname) {        this.sname = sname;    }    public void setSsex(String ssex) {        this.ssex = ssex;    }    public int getSid() {        return sid;    }    public String getSname() {        return sname;    }    public String getSsex() {        return ssex;    }}

3.JSON解析我使用的是阿里巴巴研发的解析



核心处理:

[java] view plain copy
print?
  1. package com.example.android31_xmlorjson;  
  2. import android.os.AsyncTask;  
  3. import android.support.v7.app.AppCompatActivity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.util.Xml;  
  7. import android.view.View;  
  8. import com.alibaba.fastjson.JSON;  
  9. import org.xmlpull.v1.XmlPullParser;  
  10. import org.xmlpull.v1.XmlPullParserException;  
  11.   
  12. import java.io.IOException;  
  13. import java.io.InputStream;  
  14. import java.net.HttpURLConnection;  
  15. import java.net.MalformedURLException;  
  16. import java.net.URL;  
  17. import java.util.List;  
  18.   
  19. public class MainActivity extends AppCompatActivity {  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main);  
  25.     }  
  26.   
  27.     public  void getNetXml(View view){  
  28.         new MyXmlTask().execute();  
  29.     }  
  30.     //异步获取网络xml  
  31.     class MyXmlTask extends AsyncTask{  
  32.         @Override  
  33.         protected Object doInBackground(Object[] objects) {  
  34.             //获取网络数据  
  35.             String path=”http://192.168.43.210:8080/student.xml”;  
  36.             try {  
  37.                 URL url=new URL(path);  
  38.                 HttpURLConnection connection= (HttpURLConnection) url.openConnection();  
  39.                 //设置请求方式(一般提交数据使用POST,获取数据使用GET)  
  40.                connection.setRequestMethod(”GET”);  
  41.                 //设置请求时间  
  42.                connection.setConnectTimeout(5000);  
  43.                 //获取结果码  
  44.                 int code=connection.getResponseCode();  
  45.                 if(200==code){  
  46.                  InputStream is=connection.getInputStream();//获取读流  
  47.                 //打印自己的结果  
  48.                     //   int len=0;  
  49. //                    byte[] buf=new byte[1024];  
  50.                     //StringBuffer stringBuffer=new StringBuffer();  
  51. //                    while((len=is.read(buf))!=-1){  
  52. //                        String s=new String(buf,0,len);  
  53. //                        stringBuffer.append(s);  
  54. //                    }  
  55.                     //Log.i(“test”,stringBuffer.toString());  
  56.                    //解析XML  (我们使用Android特有的pull解析)  
  57.                     //实例化解析器  
  58.                     XmlPullParser pullParser= Xml.newPullParser();  
  59.                     //进行解析  (参数一:数据源(网络流);参数二:编码方式)  
  60.                     pullParser.setInput(is,”UTF-8”);  
  61.                     //解析标签类型  
  62.                     int type=pullParser.getEventType();  
  63.                      while(type!=XmlPullParser.END_DOCUMENT){ //判断不是结束标签  
  64.                          switch (type){  
  65.                              case XmlPullParser.START_TAG:  
  66.                               //获取开始标签的名字  
  67.                                  String  starTagName=pullParser.getName();  
  68.                                  if(“student”.equals(starTagName)){  
  69.                                      //获取属性值id的值  
  70.                                      String sid=pullParser.getAttributeName(0);  
  71.                                      Log.i(”test”,“”+sid);  
  72.                                  } else if(“sname”.equals(starTagName)){  
  73.                                      String sname=pullParser.nextText();  
  74.                                      Log.i(”test”,“”+sname);  
  75.                                  } else if(“sage”.equals(starTagName)){  
  76.                                      String sage=pullParser.nextText();  
  77.                                      Log.i(”test”,“”+sage);  
  78.                                  }  
  79.                                       break;  
  80.                              case XmlPullParser.END_TAG:  
  81.                                  break;  
  82.                          }  
  83.                          //细节  
  84.                          type=pullParser.next();  
  85.                      }  
  86.                     //关闭流  
  87.                     is.close();  
  88.                 }  
  89.             } catch (MalformedURLException e) {  
  90.                 e.printStackTrace();  
  91.             } catch (IOException e) {  
  92.                 e.printStackTrace();  
  93.             } catch (XmlPullParserException e) {  
  94.                 e.printStackTrace();  
  95.             }  
  96.             return null;  
  97.         }  
  98.   
  99.         @Override  
  100.         protected void onPostExecute(Object o) {  
  101.             super.onPostExecute(o);  
  102.         }  
  103.     }  
  104.   
  105.     public void getNetJSON(View view){  
  106.              new MyJsonTask().execute();  
  107.     }  
  108.   
  109.     //异步获取网络Json  
  110.     class MyJsonTask extends AsyncTask{  
  111.         @Override  
  112.         protected Object doInBackground(Object[] objects) {  
  113.          //获取网络Json  
  114.             String  path=”http://192.168.43.210:8080/students.json”;  
  115.             try {  
  116.                 URL url=new URL(path);  
  117.             HttpURLConnection connection= (HttpURLConnection) url.openConnection();  
  118.              connection.setRequestMethod(”GET”);  
  119.              connection.setConnectTimeout(5000);  
  120.              if(connection.getResponseCode()==200){  
  121.                     InputStream is=connection.getInputStream();  
  122.                     int len=0;  
  123.                   byte[] buf= new byte[1024];  
  124.                  StringBuffer sb=new StringBuffer();  
  125.                  while ((len=is.read(buf))!=-1){  
  126.                   String s=new String(buf,0,len);  
  127.                      sb.append(s);  
  128.                  }  
  129.                  //输出打印  
  130.                  Log.i(”test”,sb.toString());  
  131.                //解析JSON’  
  132.             BigObject bigObject=JSON.parseObject(sb.toString(),BigObject.class);  
  133.                  int count=bigObject.getCount();  
  134.                  Log.i(”test”,count+“”);  
  135.                List<Student> stuList=bigObject.getStudents();  
  136.                  for (Student sss : stuList) {  
  137.                     Log.i(”test”,sss.getSname()+“ ”+sss.getSsex());  
  138.                  }  
  139.              }  
  140.             } catch (MalformedURLException e) {  
  141.                 e.printStackTrace();  
  142.             } catch (IOException e) {  
  143.                 e.printStackTrace();  
  144.             }  
  145.             return null;  
  146.         }  
  147.   
  148.         @Override  
  149.         protected void onPostExecute(Object o) {  
  150.   
  151.             super.onPostExecute(o);  
  152.         }  
  153.     }  
  154.   
  155.   
  156.   
  157. }  
package com.example.android31_xmlorjson;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.util.Xml;import android.view.View;import com.alibaba.fastjson.JSON;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.List;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public  void getNetXml(View view){        new MyXmlTask().execute();    }    //异步获取网络xml    class MyXmlTask extends AsyncTask{        @Override        protected Object doInBackground(Object[] objects) {            //获取网络数据            String path="http://192.168.43.210:8080/student.xml";            try {                URL url=new URL(path);                HttpURLConnection connection= (HttpURLConnection) url.openConnection();                //设置请求方式(一般提交数据使用POST,获取数据使用GET)               connection.setRequestMethod("GET");                //设置请求时间               connection.setConnectTimeout(5000);                //获取结果码                int code=connection.getResponseCode();                if(200==code){                 InputStream is=connection.getInputStream();//获取读流                //打印自己的结果                    //   int len=0;//                    byte[] buf=new byte[1024];                    //StringBuffer stringBuffer=new StringBuffer();//                    while((len=is.read(buf))!=-1){//                        String s=new String(buf,0,len);//                        stringBuffer.append(s);//                    }                    //Log.i("test",stringBuffer.toString());                   //解析XML  (我们使用Android特有的pull解析)                    //实例化解析器                    XmlPullParser pullParser= Xml.newPullParser();                    //进行解析  (参数一:数据源(网络流);参数二:编码方式)                    pullParser.setInput(is,"UTF-8");                    //解析标签类型                    int type=pullParser.getEventType();                     while(type!=XmlPullParser.END_DOCUMENT){ //判断不是结束标签                         switch (type){                             case XmlPullParser.START_TAG:                              //获取开始标签的名字                                 String  starTagName=pullParser.getName();                                 if("student".equals(starTagName)){                                     //获取属性值id的值                                     String sid=pullParser.getAttributeName(0);                                     Log.i("test",""+sid);                                 } else if("sname".equals(starTagName)){                                     String sname=pullParser.nextText();                                     Log.i("test",""+sname);                                 } else if("sage".equals(starTagName)){                                     String sage=pullParser.nextText();                                     Log.i("test",""+sage);                                 }                                      break;                             case XmlPullParser.END_TAG:                                 break;                         }                         //细节                         type=pullParser.next();                     }                    //关闭流                    is.close();                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            } catch (XmlPullParserException e) {                e.printStackTrace();            }            return null;        }        @Override        protected void onPostExecute(Object o) {            super.onPostExecute(o);        }    }    public void getNetJSON(View view){             new MyJsonTask().execute();    }    //异步获取网络Json    class MyJsonTask extends AsyncTask{        @Override        protected Object doInBackground(Object[] objects) {         //获取网络Json            String  path="http://192.168.43.210:8080/students.json";            try {                URL url=new URL(path);            HttpURLConnection connection= (HttpURLConnection) url.openConnection();             connection.setRequestMethod("GET");             connection.setConnectTimeout(5000);             if(connection.getResponseCode()==200){                    InputStream is=connection.getInputStream();                    int len=0;                  byte[] buf= new byte[1024];                 StringBuffer sb=new StringBuffer();                 while ((len=is.read(buf))!=-1){                  String s=new String(buf,0,len);                     sb.append(s);                 }                 //输出打印                 Log.i("test",sb.toString());               //解析JSON'            BigObject bigObject=JSON.parseObject(sb.toString(),BigObject.class);                 int count=bigObject.getCount();                 Log.i("test",count+"");               List<Student> stuList=bigObject.getStudents();                 for (Student sss : stuList) {                    Log.i("test",sss.getSname()+" "+sss.getSsex());                 }             }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            return null;        }        @Override        protected void onPostExecute(Object o) {            super.onPostExecute(o);        }    }}




原创粉丝点击