思维导图:


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

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

效果图:

布局:


输出结果:

 xml解析


json解析


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

 

①student.xml

<?xml version="1.0" encoding="UTF-8"?>            码农01      101              码农02      102              码农03      103      


②students.json

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

第二步: 写好布局文件

<?xml version="1.0" encoding="utf-8"?>    


第三步:核心处理类

注意:

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

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 students;    public BigObject() {    }    public BigObject(int count, List students) {        this.count = count;        this.students = students;    }    public void setCount(int count) {        this.count = count;    }    public void setStudents(List students) {        this.students = students;    }    public int getCount() {        return count;    }    public List 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 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);        }    }}




更多相关文章

  1. Android(安卓)XML解析学习——Sax方式
  2. android:打开系统联系人界面并获取数据
  3. Android(安卓)Socket 开发
  4. android之cursor
  5. Android通过Aidl调用Service实例
  6. Android解析中国天气接口JSon数据,应用于天气查询
  7. 从MediaStore获取制定文件夹下的视频信息
  8. 关于android的ListView的getCheckItemIds无法准确得到被选checkb
  9. 我的Android我做主

随机推荐

  1. Android的Handler总结(1)
  2. Android四大组件之 服务Service
  3. android 悬浮球的实现,全部界面可用
  4. Android(安卓)面试--请描述一下Activity
  5. Android使用BitmapFactory.Options解决加
  6. Android 屏幕分辩率相关问题
  7. Android组件化导致的代码不生效
  8. java回调C++
  9. 一个 Android 简易的新闻客户端
  10. Android Service Framework分析