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

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

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

思维导图:


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

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

效果图:

布局:


输出结果:

 xml解析


json解析


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

 

①student.xml

  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

  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":"男"}]}

第二步: 写好布局文件

  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配上权限

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

BigObject.Java

  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
  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解析我使用的是阿里巴巴研发的解析



核心处理:

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



}




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值