android利用HttpURLConnection+XmlPullParser解析Xml文件

android利用HttpURLConnection+XmlPullParser解析Xml文件
需要解析的xml
这里写图片描述
第一步:配置获取网络数据权限

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

第二步:activity_main.xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.android_29.MainActivity">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="a"
        android:text="获取"
        />
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_xml"
        ></ListView>
</LinearLayout>

建立一个Student的类里面有两个属性name 和 sex

package com.example.android_29;

public class Student {
    private String name;
    private String sex;
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Student(String name, String sex) {
        super();
        this.name = name;
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

MainActivity 类 这里用到了BaseAdapter适配器,利用HttpURLConnection 获取链接对象

public class MainActivity extends AppCompatActivity {

    private ListView lv_xml;
    private List<Student> students=new ArrayList<>();
    private MybaseAdapter mybaseAdapter;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv_xml =(ListView)findViewById(R.id.lv_xml);
        //实例化进度条对话框
        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("在拼命加载中");

        //实例化适配器
        mybaseAdapter = new MybaseAdapter();
        //设置适配器
        lv_xml.setAdapter(mybaseAdapter);



    }

    public void a(View view){
        new MyasyncTask().execute();
    }
//适配器
    class MybaseAdapter extends BaseAdapter{

    private TextView tv_1;
    private TextView tv_2;

    @Override
    public int getCount() {
        return students.size();
    }

    @Override
    public Object getItem(int i) {
        return students.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view=getLayoutInflater().inflate(R.layout.activity_main2,null);
        tv_1 =(TextView)view.findViewById(R.id.tv_1);
        tv_2 =(TextView)view.findViewById(R.id.tv_2);
        tv_1.setText(students.get(i).getName());
        tv_2.setText(students.get(i).getSex());

        return view;
    }
}

    class MyasyncTask extends AsyncTask{

        private Student student;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.show();
        }

        @Override
        protected Object doInBackground(Object[] objects) {
            //1.确定网络路径
            String path="http://193.168.2.220:8080/G150825_S2SH/studentActionXML.action";
            try {
                //2实例化URL
                URL url=new URL(path);
                //3得到链接对象
                HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
                //4设置请求方式
                httpURLConnection.setRequestMethod("GET");
                //5优化,设置链接超时的时间
                httpURLConnection.setConnectTimeout(5000);
                //6得到结果码
               int rc= httpURLConnection.getResponseCode();
                if(rc==200){
                    //7获取服务器返回过来的数据
                    InputStream is=httpURLConnection.getInputStream();
                    //利用PULL解析
                    XmlPullParser xmlPullParser= Xml.newPullParser();
                    try {
                        xmlPullParser.setInput(is,"UTF-8");
                       int et=xmlPullParser.getEventType();
                        while(et!=XmlPullParser.END_DOCUMENT){
                            switch (et) {
                                    case XmlPullParser.START_TAG:
                                    //开始标签的名字
                                    String startTagName=xmlPullParser.getName();
                                    if("student".equals(startTagName)){
                                        student = new Student();
                                        //得到name属性值
                                        String name=xmlPullParser.getAttributeValue(0);
                                        student.setName(name);
                                    }else if("sex".equals(startTagName)){
                                        //得到sex的文本值
                                        String sex=xmlPullParser.nextText();
                                        student.setSex(sex);
                                    }
                                    break;
                                case XmlPullParser.END_TAG:
                                    //结束标签的名字
                                    String endTagName=xmlPullParser.getName();
                                    if("student".equals(endTagName)){
                                        students.add(student);
                                    }
                                    break;
                            }
                            et=xmlPullParser.next();

                        }

                        } catch (XmlPullParserException e) {
                        e.printStackTrace();
                    }
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }


        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            //通知适配器发生改变
            mybaseAdapter.notifyDataSetChanged();
            progressDialog.cancel();

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值