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

思维导图:


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



}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值