您的位置:首页 > 理论基础 > 计算机网络

Android 获取XML网络数据并绑定到ListView

2015-04-29 18:45 465 查看
下面这个例子讲述当ListView中显示的数据来自于网络的时候(比如新闻消息),对数据进行获取并显示

1、添加ListView中每一项的item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal" >

<TextView

android:id="@+id/record"

android:layout_width="230dp"

android:layout_height="wrap_content" />

<TextView

android:id="@+id/name"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

2、添加实体类NewsObj

public class NewsObj implements Serializable {

private static final long serialVersionUID = 4514356981704275456L;

private String name;

private int id;

}// 省去属性get和set方法

3、添加一个类用于处理请求消息
public class NewsService {
// 解析XML数据
private static List parseXML(InputStream ins) throws Exception {
List list = new ArrayList();
NewsObj obj = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(ins, "UTF-8");
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_TAG:
if ("news".equals(parser.getName())) {
int id = new Integer(parser.getAttributeValue(0));
obj = new NewsObj();
obj.setId(id);
} else if ("name".equals(parser.getName())) {
obj.setName(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("news".equals(parser.getName())) {
list.add(obj);
obj = null;
}
break;
}
event = parser.next();
}
return list;
}

// 获取最新的资讯
public static List getLastnews(String Urlpath) throws Exception {
URL url = new URL(Urlpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
Log.i("CONN", conn.toString());
if (conn.getResponseCode() == 200) {
InputStream ins = conn.getInputStream();
return parseXML(ins);
}
return null;
}
}


4、修改MainActivity
public class MainActivity extends Activity {
private Handler handler;
private SimpleAdapter adapter;
private ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
handler = new Handler();
new Thread(runa).start();
}

private Runnable setadapter = new Runnable() {
@Override
public void run() {
lv.setAdapter(adapter);
}
};

private void SetView() {
try {
List videos = NewsService.getLastnews("http://10.0.2.2:4484/WebSite1/XMLFile.xml");
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (NewsObj news : videos) {
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("id", news.getId());
item.put("name", news.getName());
data.add(item);
}
adapter = new SimpleAdapter(getApplicationContext(), data,
R.layout.item, new String[] { "id", "name" }, new int[] { R.id.record, R.id.name });
handler.post(setadapter);
} catch (Exception e) {
e.printStackTrace();
}
}

private Runnable runa = new Runnable() {
@Override
public void run() {
Looper.prepare();
SetView();
}
};
}


5、添加一个web测试项目

上一步中网站请求地址返回的数据如下

<?xml version="1.0" encoding="utf-8" ?>

<videos>

<news id ="11">

<name>hello world</name>

</news>

<news id ="12">

<name>Livingstone</name>

</news>

</videos>

6、添加网络访问权限,运行程序



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