//pull解析
public class MainActivity extends AppCompatActivity {
private ListView lv;
private List<Data> list ;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得控件
lv = (ListView) findViewById(R.id.lv);
btn = (Button) findViewById(R.id.webbtn);
//请求数据
loadData();
//给btn设置监听
btn.setOnClickListener(listener);
}
//请求数据
private void loadData() {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... strings) {
try {
String path = strings[0];
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置请求方式
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
//获得请求码
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
//解析XML
XmlPullParser parser = Xml.newPullParser();
//设置
parser.setInput(is, "utf-8");
int type = parser.getEventType();
Data data = null;
while (type != XmlPullParser.END_DOCUMENT) {
if (type == XmlPullParser.START_TAG) {
if ("tweets".equals(parser.getName())) {
//初始化集合
list=new ArrayList<Data>();
}else if("tweet".equals(parser.getName())){
//初始化对象
data=new Data();
} else if("portrait".equals(parser.getName())){
//获得值
String portrait=parser.nextText();
data.setPortrait(portrait);
}else if("author".equals(parser.getName())){
String author=parser.nextText();
data.setAuthor(author);
}else if("body".equals(parser.getName())){
String body=parser.nextText();
data.setBody(body);
}else if("pubDate".equals(parser.getName())){
String pubdate=parser.nextText();
data.setPubDate(pubdate);
}else if("imgSmall".equals(parser.getName())){
String imgsmall=parser.nextText();
data.setImgSmall(imgsmall);
}
}else if(type==XmlPullParser.END_TAG){
if("tweet".equals(parser.getName())){
//向集合中添加数据
list.add(data);
}
}
//移动到下一行
type = parser.next();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
//适配数据
lv.setAdapter(new MyAdapter(MainActivity.this,list));
//把数据添加到数据库中
PersonDao dao=new PersonDao(MainActivity.this);
dao.add(list);
super.onPostExecute(s);
}
}.execute("路径");
}
//sax解析
自定义一个类
public class SaxHandler extends DefaultHandler {
private List<Book> list;
private Book book;
//定义一个标记,记住刚才标签的名字
private String preType=null;
public List<Book> getBookList(InputStream is,SaxHandler saxhandler){
//获得sax解析工厂实例
SAXParserFactory sf=SAXParserFactory.newInstance();
//获得解析者
try {
SAXParser parser=sf.newSAXParser();
//解析文档
parser.parse(is, saxhandler);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
//解析文档开始时,初始化集合
list=new ArrayList<Book>();
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
//读取结束时,调用此方法
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
if("Book".equals(qName)){
book=new Book();
}
//记住标签名字
preType=qName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
//读到标签结束,回调的方法
if("Book".equals(qName)){
list.add(book);
}
//把标签设为空
preType=null;
super.endElement(uri, localName, qName);
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//解析文本会执行的方法,获得内容
String content=new String(ch,start,length);
//判断是哪一个标签的文本
if("name".equals(preType)){
book.setName(content);
}else if("price".equals(preType)){
book.setPrice(content);
}else if("author".equals(preType)){
book.setAuthor(content);
}
super.characters(ch, start, length);
}
}//此处Bean包省略,自己去写一下就OK了
//主Activity中的操作
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得控件
tv=(TextView)findViewById(R.id.textView1);
}
//监听方法
public void btn(View v)
{
SaxHandler saxhandler=new SaxHandler();
try {
InputStream is=getAssets().open("Books.xml");
List<Book> list=saxhandler.getBookList(is, saxhandler);
tv.setText(list+"");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//dom解析
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private List<Book> list=new ArrayList<Book>();
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//调用方法
domResolver();
//获得控件
tv=(TextView)findViewById(R.id.textView1);
}
//dom解析xml文档
public void domResolver()
{
//获得dom解析工厂实例
try {
DocumentBuilderFactory df=DocumentBuilderFactory.newInstance();
//获得dom解析者
DocumentBuilder db=df.newDocumentBuilder();
//开始解析xml
//判断sdcard是否存在
File f=null;
if(SdcardIsExists())
{
f=new File(Environment.getExternalStorageDirectory(), "Books.xml");
//开始解析xml
Document document=db.parse(f);
//获得Book标签
NodeList nodelist=document.getElementsByTagName("Book");
//遍历集合
for(int i=0;i<nodelist.getLength();i++)
{
//获得节点
Element element=(Element) nodelist.item(i);
String name=element.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
String price=element.getElementsByTagName("price").item(0).getFirstChild().getNodeValue();
String author=element.getElementsByTagName("author").item(0).getFirstChild().getNodeValue();
//Log.d(TAG, "书名"+name);
//封装进对象
Book book=new Book();
book.setAuthor(author);
book.setName(name);
book.setPrice(price);
//放进list中
list.add(book);
}
}else{
Toast.makeText(MainActivity.this, "请先插入sd卡", 0).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//判断sdacard是否存在
public boolean SdcardIsExists()
{
//获得sdcard状态
String state=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED)){
return true;
}else{
return false;
}
}
//监听
public void btn(View v)
{
tv.setText(list.toString());
}
}