browse news

首先定义两个UI界面activity_main.xml和子界面news_item.xml


在MianActivity类中获取服务器类文件解析到ListView控件上显示代码如下

package cn.itcast.news;

import java.io.ByteArrayInputStream;
import java.util.List;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import cn.itcast.news.bean.NewsInfo;
import cn.itcast.news.utils.NewsInfoService;

import com.example.flying_universe.news.R;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.image.SmartImageView;

public class MainActivity extends Activity {
   private ListView lv_news;
   private LinearLayout loading;
   private List<NewsInfo> newsInfos;

   private class NewsAdapter extends BaseAdapter {

      public int getCount() {
         return newsInfos.size();
      }

      public View getView(int position, View convertView, ViewGroup parent) {
         View view = View.inflate(MainActivity.this, R.layout.news_item,
               null);
         SmartImageView siv = (SmartImageView) view
               .findViewById(R.id.siv_icon);
         TextView tv_title = (TextView) view.findViewById(R.id.tv_title);
         TextView tv_description = (TextView) view
               .findViewById(R.id.tv_description);
         TextView tv_type = (TextView) view.findViewById(R.id.tv_type);
         NewsInfo newsInfo = newsInfos.get(position);
               
         siv.setImageUrl(newsInfo.getIconPath(), R.drawable.ic_launcher,
               R.drawable.ic_launcher);
            
         tv_title.setText(newsInfo.getTitle());
              
         tv_description.setText(newsInfo.getDescription());
         int type = newsInfo.getType();
         switch (type) {
         case 1:
            tv_type.setText("" + newsInfo.getComment());
            break;
         case 2:
            tv_type.setTextColor(Color.RED);
            tv_type.setText("");
            break;
         case 3:
            tv_type.setTextColor(Color.BLUE);
            tv_type.setText("LIVE");
            break;
         }
         return view;
      }
    
      public Object getItem(int position) {
         return null;
      }
      
      public long getItemId(int position) {
         return 0;
      }
   }
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      lv_news = (ListView) findViewById(R.id.lv_news);
      loading = (LinearLayout) findViewById(R.id.loading);
      fillData2();
   }

   private void fillData2() {

      AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        asyncHttpClient.get(MainActivity.this.getString(R.string.serverurl),  
          new AsyncHttpResponseHandler() {
               public void onSuccess(String content) {

                  super.onSuccess(content);

                  byte[] bytes = content.getBytes();

                  ByteArrayInputStream bais = new ByteArrayInputStream(
                        bytes); 

                  newsInfos = NewsInfoService.getNewsInfos(bais);
                  if (newsInfos == null) {

                     Toast.makeText(MainActivity.this, 
                                        " ", Toast.LENGTH_LONG).show();
                  } else {

                     loading.setVisibility(View.INVISIBLE);
                     lv_news.setAdapter(new NewsAdapter());
                  }
               }
                        
               public void onFailure(Throwable error, String content) {   
                  super.onFailure(error, content);
                  Log.e("error",MainActivity.this.getString(R.string.serverurl));
                  Log.e("error", error.toString());
                  Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show();
               }
            });
   }
}
创建一个构造方法:对象有
解析xml

package cn.itcast.news.utils;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;
import cn.itcast.news.bean.NewsInfo;

public class NewsInfoService {

   public static List<NewsInfo> getNewsInfos(InputStream is) {

      XmlPullParser parser = Xml.newPullParser();
      try {
         parser.setInput(is, "utf-8");

         int type = parser.getEventType();
         List<NewsInfo> newsInfos = null;
         NewsInfo newsInfo = null;

         while (type != XmlPullParser.END_DOCUMENT) { 
            switch (type) {
            case XmlPullParser.START_TAG:
               if ("news".equals(parser.getName())) { 
                  newsInfos = new ArrayList<NewsInfo>();
               } else if ("newsInfo".equals(parser.getName())) {
                  newsInfo = new NewsInfo();
               } else if ("icon".equals(parser.getName())) {

                  String icon = parser.nextText();  
                  newsInfo.setIconPath(icon);
               } else if ("title".equals(parser.getName())) {
                  String title = parser.nextText();
                  newsInfo.setTitle(title);
               } else if ("content".equals(parser.getName())) {
                  String description = parser.nextText();
                  newsInfo.setDescription(description);
               } else if ("type".equals(parser.getName())) {
                  String newsType = parser.nextText();
                  newsInfo.setType(Integer.parseInt(newsType));
               } else if ("comment".equals(parser.getName())) {
                  String comment = parser.nextText();
                  newsInfo.setComment(Long.parseLong(comment));
               }
               break;
            case XmlPullParser.END_TAG:
               if ("newsInfo".equals(parser.getName())) {
                  newsInfos.add(newsInfo);
                  newsInfo = null;
               }
               break;
            }
            type = parser.next();
         }
         return newsInfos;
      } catch (Exception e) {
         e.printStackTrace();
         return null;
      }
   }
}
配置服务器

<?xml version="1.0" encoding="UTF-8"?>
<news>
    <newsInfo>
        <icon>http://172.16.25.13:8080/img/a.jpg</icon>
        <title>科技温暖世界</title>
        <content>进入一个更有爱的领域</content>
        <type>1</type>
        <comment>69</comment>
    </newsInfo>
    <newsInfo>
        <icon>http://172.16.25.13:8080/img/b.jpg</icon>
        <title>《神武》</title>
        <content>新美术资源盘点 视觉新体验</content>
        <type>2</type>
        <comment>35</comment>
    </newsInfo>
    <newsInfo>
        <icon>http://172.16.25.13:8080/img/c.jpg</icon>
        <title>南北车正式公布合并</title>
        <content>南北车将于今日正式公布合并</content>
        <type>3</type>
        <comment>2</comment>
    </newsInfo>
    <newsInfo>
        <icon>http://172.16.25.13:8080/img/d.jpg</icon>
        <title>北京拟推医生电子注册</title>
        <content>突破多点执业"限制"</content>
        <type>1</type>
        <comment>25</comment>
    </newsInfo>
    <newsInfo>
        <icon>http://172.16.25.13:8080/img/e.jpg</icon>
        <title>风力发电进校园</title>
        <content>风力发电普进校园</content>
        <type>2</type>
        <comment>26</comment>
    </newsInfo>
    <newsInfo>
        <icon>http://172.16.25.13:8080/img/f.jpg</icon>
        <title>地球一小时</title>
        <content>地球熄灯一小时</content>
        <type>1</type>
        <comment>23</comment>
    </newsInfo>
</news>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值