Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 解析數據用ListView來展現,解析listview

解析數據用ListView來展現,解析listview

編輯:關於android開發

解析數據用ListView來展現,解析listview


package com.org.demo.wangfeng;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import com.org.demo.wangfeng.demo.News;
import com.org.wangfeng.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Xml;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
    // 下載的地址
    private String path = "";
    List<News> newsList;
    private ListView lv_main_list;
    @SuppressLint("HandlerLeak")
    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            lv_main_list.setAdapter(new MyAdapter());
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getNewInfo();
        lv_main_list = (ListView) findViewById(R.id.lv_main_list);
        // 要保證在設置適配器時,新聞xml文件已經解析完畢
        // lv_main_list.setAdapter(new MyAdapter());
    }
/**
 * 設置lv_main_list適配器
 * @author Administrator
 *
 */
    private class MyAdapter extends BaseAdapter {
        // 得到模型曾中元素的數量,用來確定ListView需要有多少個條目
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return newsList.size();
        }

        // 返回一個View對象,作為ListView的條目顯示至界面
        @Override
        public View getView(int positon, View convertView, ViewGroup parent) {
            News newss = newsList.get(positon);
            View v;
            ViewHolder myHolder;
            if (convertView == null) {
                v = View.inflate(MainActivity.this, R.layout.mainlist_item,
                        null);
                myHolder = new ViewHolder();
                // 把布局文件中所有組件的對象封裝至ViewHolder對象中
                myHolder.tv_title = (TextView) v
                        .findViewById(R.id.tv_main_title);
                myHolder.tv_detail = (TextView) v
                        .findViewById(R.id.tv_main_detail);
                myHolder.tv_comment = (TextView) v
                        .findViewById(R.id.tv_main_comment);
                // 把ViewHolder對象封裝至View對象中
                v.setTag(myHolder);

            } else {
                v = convertView;
                myHolder = (ViewHolder) v.getTag();
            }
            // TODO Auto-generated method stub

            // 給三個文本框設置內容
            myHolder.tv_title.setText(newss.getTitle());
            myHolder.tv_detail.setText(newss.getDetail());
            myHolder.tv_comment.setText(newss.getComment() + "條評論");

            // 給新聞圖片imageview設置內容

            return v;
        }

        class ViewHolder {
            // 條目的布局文件中有什麼組件,這裡就定義什麼組件
            TextView tv_title;
            TextView tv_detail;
            TextView tv_comment;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

    }

    private void getNewInfo() {
        // TODO Auto-generated method stub
        Thread t = new Thread() {
            @Override
            public void run() {
                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url
                            .openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(5000);
                    conn.setReadTimeout(5000);
                    conn.connect();
                    if (conn.getResponseCode() == 200) {
                        // 服務器返回的流
                        InputStream is = conn.getInputStream();
                        // 使用pull解析器來解析流
                        parseNewsXml(is);

                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        };
        t.start();
    }

    /** 解析xml */
    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 ("imageUrl".equals(xp.getName())) {
                        String imageUrl = xp.nextText();
                        news.setImageUrl(imageUrl);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if ("news".equals(xp.getName())) {
                        newsList.add(news);
                    }
                    break;
                }

                // 解析完當期的節點後,把指針移動至下個節點,並返回它的事件類型
                type = xp.next();
            }

            for (News i : newsList) {
                System.out.println(i.toString());
            }
            // 發消息,讓主線程設置ListView的適配器,如果消息不需要攜帶數據的話可以發送個空消息

            handler.sendEmptyMessage(1);// 數據1 表示消息發送成功的意思

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/iv_main_image"
        android:layout_width="70dp"
        android:layout_height="85dp"
        android:contentDescription="@null"
        android:paddingBottom="2dp"
        android:paddingTop="3dp"
        android:scaleType="fitXY"
        android:src="@drawable/d" />

    <TextView
        android:id="@+id/tv_main_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv_main_image"
        android:singleLine="true"
        android:text="這是大標題"
        android:textSize="23sp" />

    <TextView
        android:id="@+id/tv_main_detail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv_main_image"
        android:layout_toRightOf="@id/iv_main_image"
        android:lines="2"
        android:text="這是正文"
        android:textColor="@android:color/darker_gray"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/tv_main_comment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@id/tv_main_detail"
        android:text="評論書"
        android:textColor="#ff0000" />

</RelativeLayout>

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved