package com.example.httpclient_get_xml;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import com.example.adapter.MyAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView lv_listview;
private List<Movies> movielist;
private Movies movies;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
// 获取对象
lv_listview = (ListView) super.findViewById(R.id.lv_listview);
// 开启子线程
new Thread() {
public void run() {
/**
* http://v.juhe.cn/boxoffice/rank.php?key=
* d3d0f65864bcc5f7d750284912e2baf5&area=CN&dtype=xml
*/
try {
//使用HttpClient的GET方法获取接口
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(
"http://v.juhe.cn/boxoffice/rank.php?key=d3d0f65864bcc5f7d750284912e2baf5&area=CN&dtype=xml");
HttpResponse response = client.execute(httpget);
//判断返回值是否为200
if (response.getStatusLine().getStatusCode() == 200) {
InputStream is = response.getEntity().getContent();
//调用Pull解析方法
movielist = XML_pull(is);
//向Handler传值
Message msg = handler.obtainMessage(1, movielist);
handler.sendMessage(msg);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}
// XML解析方法 解析后返回List<Movies>对象
public List<Movies> XML_pull(InputStream is) {
try {
XmlPullParserFactory pullParserFactory = XmlPullParserFactory
.newInstance();
// 获取XmlPullParser的实例
//XmlPullParser xmlPullParser = pullParserFactory.newPullParser();
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setInput(is, "UTF-8");
int flg = xmlPullParser.getEventType();
// 循环解析
while (flg != XmlPullParser.END_DOCUMENT) {// 文档解析没有结束
//获取标签名称
String nodeName = xmlPullParser.getName();
switch (flg) {
case XmlPullParser.START_DOCUMENT:// 文档解析开始
//创建集合
movielist = new ArrayList<Movies>();
break;
case XmlPullParser.START_TAG:// 标签解析开始
if("item".equals(nodeName)){
movies = new Movies();
}else if("rid".equals(nodeName)){
movies.setRid(Integer.parseInt(xmlPullParser.nextText()));
}else if("name".equals(nodeName)){
movies.setName(xmlPullParser.nextText());
}else if("wk".equals(nodeName)){
movies.setWk(xmlPullParser.nextText());
}else if("wboxoffice".equals(nodeName)){
movies.setWboxoffice(xmlPullParser.nextText());
}else if("tboxoffice".equals(nodeName)){
movies.setTboxoffice(xmlPullParser.nextText());
}
break;
case XmlPullParser.END_TAG:// 标签解析结束
if("item".equals(nodeName)){
movielist.add(movies);
movies=null;
}
break;
}
flg = xmlPullParser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return movielist;
}
// 创建Handler
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
//获取子线程传递的对象
movielist = (List<Movies>) msg.obj;
MyAdapter adapter = new MyAdapter(MainActivity.this, movielist);
lv_listview.setAdapter(adapter);
}
}
};
}
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import com.example.adapter.MyAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView lv_listview;
private List<Movies> movielist;
private Movies movies;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
// 获取对象
lv_listview = (ListView) super.findViewById(R.id.lv_listview);
// 开启子线程
new Thread() {
public void run() {
/**
* http://v.juhe.cn/boxoffice/rank.php?key=
* d3d0f65864bcc5f7d750284912e2baf5&area=CN&dtype=xml
*/
try {
//使用HttpClient的GET方法获取接口
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(
"http://v.juhe.cn/boxoffice/rank.php?key=d3d0f65864bcc5f7d750284912e2baf5&area=CN&dtype=xml");
HttpResponse response = client.execute(httpget);
//判断返回值是否为200
if (response.getStatusLine().getStatusCode() == 200) {
InputStream is = response.getEntity().getContent();
//调用Pull解析方法
movielist = XML_pull(is);
//向Handler传值
Message msg = handler.obtainMessage(1, movielist);
handler.sendMessage(msg);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}
// XML解析方法 解析后返回List<Movies>对象
public List<Movies> XML_pull(InputStream is) {
try {
XmlPullParserFactory pullParserFactory = XmlPullParserFactory
.newInstance();
// 获取XmlPullParser的实例
//XmlPullParser xmlPullParser = pullParserFactory.newPullParser();
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setInput(is, "UTF-8");
int flg = xmlPullParser.getEventType();
// 循环解析
while (flg != XmlPullParser.END_DOCUMENT) {// 文档解析没有结束
//获取标签名称
String nodeName = xmlPullParser.getName();
switch (flg) {
case XmlPullParser.START_DOCUMENT:// 文档解析开始
//创建集合
movielist = new ArrayList<Movies>();
break;
case XmlPullParser.START_TAG:// 标签解析开始
if("item".equals(nodeName)){
movies = new Movies();
}else if("rid".equals(nodeName)){
movies.setRid(Integer.parseInt(xmlPullParser.nextText()));
}else if("name".equals(nodeName)){
movies.setName(xmlPullParser.nextText());
}else if("wk".equals(nodeName)){
movies.setWk(xmlPullParser.nextText());
}else if("wboxoffice".equals(nodeName)){
movies.setWboxoffice(xmlPullParser.nextText());
}else if("tboxoffice".equals(nodeName)){
movies.setTboxoffice(xmlPullParser.nextText());
}
break;
case XmlPullParser.END_TAG:// 标签解析结束
if("item".equals(nodeName)){
movielist.add(movies);
movies=null;
}
break;
}
flg = xmlPullParser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return movielist;
}
// 创建Handler
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
//获取子线程传递的对象
movielist = (List<Movies>) msg.obj;
MyAdapter adapter = new MyAdapter(MainActivity.this, movielist);
lv_listview.setAdapter(adapter);
}
}
};
}