Android—(获取并解析xml和Json)

来源:互联网 发布:淘宝客单价算法 编辑:程序博客网 时间:2024/05/01 08:18

思维导图:


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

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

效果图:

布局:


输出结果:

 xml解析


json解析


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

 

①student.xml

<?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

{"count":3,"students":[{"sid":1,"sname":"小小","ssex":"女"},{"sid":2,"sname":"小码","ssex":"男"},{"sid":3,"sname":"小农","ssex":"男"}]}

第二步: 写好布局文件

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

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

BigObject.java

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

      下载地址:http://download.csdn.net/detail/a985548426/9913248

核心处理:

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




原创粉丝点击