从局域网中获得服务器中的JSON和XML,进行解析

来源:互联网 发布:多玩tbc数据库 编辑:程序博客网 时间:2024/06/05 02:12

今天使用了如何从服务器中获取资源JSON和XML 的使用方法,对大家会比较有帮助,于是整理一下

首先在Tomcat中新建你的两个文件,当然这里的话是Web后端会做的事

这里就比喻一下

在你的tomcat安装目录apache-tomcat-9.0.0.M20\webapps\ROOT新建一个students.xml文件


<?xml version="1.0" encoding="UTF-8"?><students><student sid="1"><sname>张三</sname><sage>10</sage></student><student sid="2"><sname>李四</sname><sage>9</sage></student><student sid="3"><sname>王五</sname><sage>11</sage></student></students>

和一个students.json文件

{"count":3,"students":[{"sid":1,"sname":"
张三
","ssex":"女"},{"sid":2,"sname":"李四","ssex":"妖"},
{"sid":3,"sname":"王五","ssex":"无"}]}


这两个文件建完之后最好是另存为UTF-8的形式

然后在你的项目中


界面:我这里就以按钮的形式来传递

 <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="获取网络XML数据"        android:onClick="getXMLByNet"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="获取网络JSON数据"        android:onClick="getJSONByNet"    />

后台

对应的Activity中

public class MainActivity extends AppCompatActivity {    private ProgressDialog pd;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //ProgressDialog是用来在获得数据前的加载        pd = new ProgressDialog(this);        pd.setMessage("正在拼命加载中。。。。");    }    /**     * 根据网络获得XML文件     * @param view     */    public void getXMLByNet(View view){        /**         * 拿数据是一个耗时操作,耗时的操作一般不在主线程中进行操作         * 所以写一个子线程         */        new MyTask().execute();    }    //执行获得XML的子线程    class MyTask extends AsyncTask{        @Override        protected Object doInBackground(Object[] objects) {            //获取网络XML数据            String path="http://192.168.43.107:8080/students.xml";            try {                URL url=new URL(path);                HttpURLConnection connection= (HttpURLConnection) url.openConnection();                connection.setRequestMethod("GET");                //设置请求超时的时间                connection.setConnectTimeout(5000);                //判断连接的响应码是否为200   状态码200 连接成功                if(connection.getResponseCode()==200){                    //获取数据,获得输入流                    InputStream is=connection.getInputStream();                   /*                   //打印测试                   byte[] bytes=new byte[1024];                    int len=0;                    StringBuffer stringBuffer=new StringBuffer();                    while ((len=is.read(bytes))!=-1){                        String s=new String(bytes,0,len);                        stringBuffer.append(s);                    }                    Log.i("test",stringBuffer.toString());*/                   //解析XML                    XmlPullParser pullParser=Xml.newPullParser();                    //设置转码                    pullParser.setInput(is,"UTF-8");                    //解析的标签类型                    int type=pullParser.getEventType();                    //如果不是结束文本,则是标签内容                    //循环获得所有的标签                    while (type!=XmlPullParser.END_DOCUMENT){                        //赋值下一个,细节                        type=pullParser.next();                        switch (type) {                            case XmlPullParser.START_TAG:                                //获取开始标签的名字                                String startTagName=pullParser.getName();                                if("student".equals(startTagName)){                                    String sid=pullParser.getAttributeName(0);                                    Log.i("test",sid);                                }else if("sname".equals(startTagName)){                                    String sname=pullParser.nextText();                                    Log.i("test",sname);                                }else if("sage".equals(startTagName)){                                    String sage=pullParser.nextText();                                    Log.i("test",sage);                                }                                break;                            case XmlPullParser.END_TAG:                                break;                        }                    }                    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);        }    }    //获得从网络获得的JSON    public void getJSONByNet(View view){        //new MyJsonTask原因如上        new MyJsonTask().execute();    }    class MyJsonTask extends AsyncTask{        @Override        protected void onPreExecute() {            //在准备的时间段进行展示            pd.show();        }        @Override        protected Object doInBackground(Object[] objects) {            //获取网络JSON数据            String path="http://192.168.43.107: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();                    byte[] bytes=new byte[1024];                    int len=0;                    StringBuffer stringBuffer=new StringBuffer();                    while ((len=is.read(bytes))!=-1){                        String s=new String(bytes,0,len);                        stringBuffer.append(s);                    }                    Log.i("test",stringBuffer.toString());                   //Gson FastJson                    //解析JSON                    //这里用的是阿里巴巴的FastJson.jar包                    //解析                    BigObject bigObject=JSON.parseObject(stringBuffer.toString(),BigObject.class);                    //stringBuffer.toString(),去获得属性进行打印                    int count=bigObject.getCount();                    Log.i("test",count+"");                    List<Student> students=bigObject.getStudents();                    for (Student student : students) {                        Log.i("test",student.getSname());                    }                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            return null;        }        @Override        protected void onPostExecute(Object o) {            //执行了的时候就取消            pd.cancel();            super.onPostExecute(o);        }    }}


两个对象 

这两个对象是用来接收JSON进行转换的


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



/** * 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 ssex) {        this.sid = sid;        this.sname = sname;        this.ssex = ssex;    }    public int getSid() {        return sid;    }    public void setSid(int sid) {        this.sid = sid;    }    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname;    }    public String getSsex() {        return ssex;    }    public void setSsex(String ssex) {        this.ssex = ssex;    }}

最后,进行配置

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


然后在后台,你就可以拿到XML和JSON 中的值,去做要做的操作了

原创粉丝点击