新闻客户端的实现

[1].准备TomCat服务器
[2].获取服务器数据
[3].使用开源项目SmartImageView(在github.com中下载)

package jacky.newsclient;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.loopj.android.image.SmartImageView;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

public class MainActivity extends AppCompatActivity {

          private List<News> newsList;
          private ListView lv;

          @Override
          protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    //[1]找到控件
                    lv = (ListView) findViewById(R.id.lv);
                    //[2]准备listview要显示的数据 去服务器取数据
                    initListData();
          }

          //准备数据
          private void initListData() {
                    new Thread() {
                              @Override
                              public void run() {
                                        super.run();
                                        try {
                                                  //[1]去服务器取数据 http://192.168.1.3:8080/news.xml
                                                  String path = "http://192.168.1.3:8080/news.xml";
                                                  URL url = new URL(path);
                                                  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                                                  conn.setRequestMethod("GET");
                                                  conn.setReadTimeout(5000);
                                                  int code = conn.getResponseCode();
                                                  if (code == 200) {
                                                            //接收成功,读取数据
                                                            InputStream in = conn.getInputStream();
                                                            //解析xml
                                                            newsList = XmlparserUtils.parserXml(in);
                                                            //展示数据
                                                            runOnUiThread(new Runnable() {
                                                                      @Override
                                                                      //UI更新
                                                                      public void run() {
                                                                                //设置适配器
                                                                                lv.setAdapter(new MyAdapter());
                                                                      }
                                                            });

                                                  }

                                        } catch (Exception e) {
                                                  e.printStackTrace();
                                        }

                              }
                    }.start();
          }

          //定义数据适配器
          private class MyAdapter extends BaseAdapter {

                    @Override
                    public int getCount() {
                              return newsList.size();
                    }

                    @Override
                    public Object getItem(int position) {
                              return null;
                    }

                    @Override
                    public long getItemId(int position) {
                              return 0;
                    }

                    @Override
                    public View getView(int position, View convertView, ViewGroup parent) {
                              View view;
                              if (convertView == null) {
                                        view = View.inflate(getApplicationContext(), R.layout.item, null);
                              } else {
                                        view = convertView;
                              }
                              //找到控件
                              SmartImageView iv_icon = (SmartImageView) view.findViewById(R.id.iv_icon);
                              TextView tv_title = (TextView) view.findViewById(R.id.tv_title);
                              TextView tv_desc = (TextView) view.findViewById(R.id.tv_desc);
                              TextView tv_type = (TextView) view.findViewById(R.id.tv_type);
                              //显示数据
                              iv_icon.setImageUrl(newsList.get(position).getImage());
                              tv_title.setText(newsList.get(position).getTitle());
                              tv_desc.setText(newsList.get(position).getDescription());
                              String typee = newsList.get(position).getType();
                              Integer type = Integer.parseInt(typee);
                              String comment = newsList.get(position).getComment();
                              switch (type) {
                                        case 1:
                                                  tv_type.setText(comment + "跟帖");
                                                  break;
                                        case 2:
                                                  tv_type.setText("国内");
                                                  break;
                                        case 3:
                                                  tv_type.setText("国外");
                                                  break;
                                        default:break;
                              }
                              return view;
                    }
          }

}

package jacky.newsclient;

/**
 * 作者:Jacky
 * 邮箱:550997728@qq.com
 * 时间:2016/2/4 13:35
 */
public class News {
          private String title;
          private String description;
          private String image;
          private String type;
          private String comment;

          public String getType() {
                    return type;
          }

          public void setType(String type) {
                    this.type = type;
          }

          public String getComment() {
                    return comment;
          }

          public void setComment(String comment) {
                    this.comment = comment;
          }

          public String getDescription() {
                    return description;
          }

          public void setDescription(String description) {
                    this.description = description;
          }

          public String getImage() {
                    return image;
          }

          public void setImage(String image) {
                    this.image = image;
          }

          public String getTitle() {
                    return title;
          }

          public void setTitle(String title) {
                    this.title = title;
          }
}

package jacky.newsclient;

import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;

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

/**
 * 作者:Jacky
 * 邮箱:550997728@qq.com
 * 时间:2016/2/4 13:34
 */
public class XmlparserUtils {
          public static List<News> parserXml(InputStream in) {
                    List<News> newsLists=null;
                    try {
                              News news = null;
                              //[1]获取解析器
                              XmlPullParser parser = Xml.newPullParser();
                              //[2]设置解析器要解析的内容
                              parser.setInput(in, "utf-8");
                              //[3]获取解析事件
                              int type = parser.getEventType();
                              //[4]不停的向下解析
                              while (type != XmlPullParser.END_DOCUMENT) {
                                        //[5]具体判断一下解析的事哪个开始标签
                                        switch (type) {
                                                  case XmlPullParser.START_TAG:
                                                            //解析开始节点
                                                            if ("channel".equals(parser.getName())) {
                                                                      //创建一个List集合
                                                                      newsLists = new ArrayList<News>();
                                                            } else if ("item".equals(parser.getName())) {
                                                                      //创建一个news对象
                                                                      news = new News();
                                                            } else if ("title".equals(parser.getName())) {
                                                                      news.setTitle(parser.nextText());

                                                            } else if ("description".equals(parser.getName())) {
                                                                      news.setDescription(parser.nextText());

                                                            } else if ("image".equals(parser.getName())) {
                                                                      news.setImage(parser.nextText());

                                                            } else if ("type".equals(parser.getName())) {
                                                                      news.setType(parser.nextText());

                                                            } else if ("comment".equals(parser.getName())) {
                                                                      news.setComment(parser.nextText());

                                                            }

                                                            break;
                                                  case XmlPullParser.END_TAG:
                                                            if ("item".equals(parser.getName())) {
                                                                      //把javabean添加到集合
                                                                      newsLists.add(news);
                                                            }

                                                            break;
                                        }
                                        //不停的向下解析
                                        type=parser.next();
                              }
                    } catch (Exception e) {
                              e.printStackTrace();
                    }
                    return newsLists;
          }


}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗杰海贼团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值