首页 > 系统 > Android > 正文

android利用HttpURLConnection+XmlPullParser解析Xml文件

2019-11-07 23:35:49
字体:
来源:转载
供稿:网友

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(); } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表