您的位置:首页 > 其它

解析xml数据

2015-09-17 08:36 507 查看
解析xml数据

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<AutoCompleteTextView
android:id="@+id/auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
/>

</RelativeLayout>
逻辑代码--MaiActivity

package com.example.week2_day3_downloadxml;

import com.example.week2_day3_downloadxml.asyncTask.MyAsyncTask;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.widget.AutoCompleteTextView;
import android.widget.Spinner;

public class MainActivity extends Activity {

/*
* 切记!切记!------需要注册网络权限
*/
private AutoCompleteTextView auto;//声明控件
private ProgressDialog dialog;//声明提示框
//要解析的xml文件地址
private static final String xmlPath = "http://api.map.baidu.com/telematics/v3/weather?location=%E5%8C%97%E4%BA%AC&output=xml&ak=mXBIDrvTOwwmYaTtN03Lo0j2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//加载布局文件
auto=(AutoCompleteTextView) findViewById(R.id.auto);//找到控件id
dialog=new ProgressDialog(MainActivity.this);//实例化提示框
//创建异步任务
new MyAsyncTask(dialog,auto,MainActivity.this).execute(xmlPath);
}
}
异步任务代码

package com.example.week2_day3_downloadxml.asyncTask;

import java.util.List;

import com.example.week2_day3_downloadxml.MainActivity;
import com.example.week2_day3_downloadxml.R;
import com.example.week2_day3_downloadxml.downXml.HttpIntenet;
import com.example.week2_day3_downloadxml.downXml.ParserXml;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Spinner;

//异步任务
public class MyAsyncTask extends AsyncTask<String, Void, List<String>> {

private ProgressDialog dialog;// 声明提示框
private AutoCompleteTextView auto;
private Context context;

public MyAsyncTask(ProgressDialog dialog, AutoCompleteTextView auto,
Context context) {
super();
this.dialog = dialog;
this.auto = auto;
this.context = context;
}

@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setTitle("下载xml文件");
dialog.setIcon(R.drawable.ic_launcher);
dialog.setMessage("正在下载.....");
dialog.show();// 显示提示框
}

// 后台执行方法
@Override
protected List<String> doInBackground(String... params) {
String xmlString = HttpIntenet.httpIntenet(params[0]);//获取网络权限
List<String> list = ParserXml.parserXml(xmlString);//开始解析
return list;
}

@Override
protected void onPostExecute(List<String> result) {
super.onPostExecute(result);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, result);//创建适配器
auto.setAdapter(adapter);//绑定适配器
dialog.dismiss();//点击其他地方时,进度框消失
}

}
网络下载

package com.example.week2_day3_downloadxml.downXml;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

//获取网络资源
public class HttpIntenet {

public static String httpIntenet(String xmlPath){
ByteArrayOutputStream out=new ByteArrayOutputStream();
String list="";
URL url;
try {
url=new URL(xmlPath);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setDoInput(true);
connection.connect();
if(connection.getResponseCode()==200){
InputStream in=connection.getInputStream();
byte[] buffer=new byte[1024];
int temp=0;
while((temp=in.read(buffer))!=-1){
out.write(buffer, 0, temp);
out.flush();
}
}
return out.toString();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
开始解析

package com.example.week2_day3_downloadxml.downXml;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

//开始解析xml文件
public class ParserXml {
public static List<String> parserXml(String xmlString) {
List<String> list=null;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 创建解析器工厂
XmlPullParser parser = factory.newPullParser();// 创建解析器
parser.setInput(new StringReader(xmlString));// 把xml文档放入解析器
int type = parser.getEventType();// 获取事件类型
while (type != XmlPullParser.END_DOCUMENT) {// 判断文档是否到结尾了
switch (type) {
case XmlPullParser.START_DOCUMENT://文档的开始位置
list = new ArrayList<String>();
break;
case XmlPullParser.START_TAG://事件类型
String nodeName = parser.getName();//得到节点的名称
if("weather".equals(nodeName)){
String name = parser.nextText();//得到标签里的内容
list.add(name);
}

default:
break;
}
type=parser.next();//继续产生事件

}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return list;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: