第一步:獲取服務器上的數據
第二步:使用pull解析器,解析數據
第三步:通過數據給listview適配器添加數據
第四步:添加網絡權限
news Bean中:
public class News {
private String title;
private String detail;
private String comment;
private String imageUrl;
@Override
public String toString() {
return "News [title=" + title + ", detail=" + detail + ", comment="
+ comment + ", imageUrl=" + imageUrl + "]";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
主Activity中:
public class MainActivity extends Activity {
List<News> newsList;
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
ListView lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new MyAdapter());
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getNewsInfo();
}
class MyAdapter extends BaseAdapter{
//得到模型層中元素的數量,用來確定listview需要有多少個條目
@Override
public int getCount() {
// TODO Auto-generated method stub
return newsList.size();
}
public View getView(int position, View convertView, ViewGroup parent) {
News news = newsList.get(position);
View v = null;
ViewHolder mHolder;
if(convertView == null){
v = View.inflate(MainActivity.this, R.layout.item_listview, null);
mHolder = new ViewHolder();
mHolder.tv_title = (TextView) v.findViewById(R.id.tv_title);
mHolder.tv_detail = (TextView) v.findViewById(R.id.tv_detail);
mHolder.tv_comment = (TextView) v.findViewById(R.id.tv_comment);
mHolder.siv = (SmartImageView) v.findViewById(R.id.iv);
v.setTag(mHolder);
}
else{
v = convertView;
mHolder = (ViewHolder) v.getTag();
}
mHolder.tv_title.setText(news.getTitle());
mHolder.tv_detail.setText(news.getDetail());
mHolder.tv_comment.setText(news.getComment() + "條評論");
mHolder.siv.setImageUrl(news.getImageUrl());
return v;
}
class ViewHolder{
TextView tv_title;
TextView tv_detail;
TextView tv_comment;
SmartImageView siv;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
private void getNewsInfo() {
Thread t = new Thread(){
@Override
public void run() {
String path = "http://192.168.1.100:8080/news.xml";
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
//發送http GET請求,獲取相應碼
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
//使用pull解析器,解析這個流
parseNewsXml(is);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
}
private void parseNewsXml(InputStream is) {
XmlPullParser xp = Xml.newPullParser();
try {
xp.setInput(is, "utf-8");
//對節點的事件類型進行判斷,就可以知道當前節點是什麼節點
int type = xp.getEventType();
News news = null;
while(type != XmlPullParser.END_DOCUMENT){
switch (type) {
case XmlPullParser.START_TAG:
if("newslist".equals(xp.getName())){
newsList = new ArrayList<News>();
}
else if("news".equals(xp.getName())){
news = new News();
}
else if("title".equals(xp.getName())){
String title = xp.nextText();
news.setTitle(title);
}
else if("detail".equals(xp.getName())){
String detail = xp.nextText();
news.setDetail(detail);
}
else if("comment".equals(xp.getName())){
String comment = xp.nextText();
news.setComment(comment);
}
else if("image".equals(xp.getName())){
String image = xp.nextText();
news.setImageUrl(image);
}
break;
case XmlPullParser.END_TAG:
if("news".equals(xp.getName())){
newsList.add(news);
}
break;
}
//解析完當前節點後,把指針移動至下一個節點,並返回它的事件類型
type = xp.next();
}
//發消息,讓主線程設置listview的適配器,如果消息不需要攜帶數據,可以發送空消息
handler.sendEmptyMessage(1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
網絡請求——新聞客戶端的一個Demo
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
安卓中服務Service的詳解
四大組件之一:服務Service 一,定義 服務是一個沒有用戶界面的在後臺運行執行耗時操作的應用組件。其他應用組件能夠開啓Service,並且當用戶
smile0528
2020-06-19 09:23:52
android中廣播的理解
廣播(Broadcast) 一,簡介 Broadcast是android中四大組件之一,它經常不用,在推送中會用到。它屬於一種流氓組件,經常播報一些
smile0528
2020-06-19 09:23:52
android中適配器的分析
一,適配器. 顧名思義,就是把一些數據給弄得適當,適合以便於在View上顯示。可以看作是 界面數據綁定的一種理解。它所操縱的數據一
smile0528
2020-06-19 09:23:52
Android提示版本更新
小明搞开发
2020-02-25 08:20:33
dialog 的使用
小明搞开发
2020-02-25 08:20:33
Android APK反編譯就這麼簡單 詳解(附圖)
小明搞开发
2020-02-25 08:20:32
Content Provider應用實例
小明搞开发
2020-02-25 08:20:32
Android res目錄下的color.xml顏色總結
小明搞开发
2020-02-25 08:20:32
post請求方式和get請求方式等網絡請求方式總結
smile0528
2020-02-23 11:00:58
安卓中的context詳解
smile0528
2020-02-23 11:00:58
服務(service)——四大組件之一
smile0528
2020-02-23 11:00:58
listview中子條目的適配方式
smile0528
2020-02-23 11:00:58