案例--新闻客户端
来源:互联网 发布:全国冷藏车配货app软件 编辑:程序博客网 时间:2024/06/07 02:22
我们要完成这个案例,首先要知道开源项目AsyncHttpClient和SmartImageView:
(1)可以在https://github.com/loopj/android-async-http这个网址上下载AsyncHttpClient的jar包,将文件粘贴在工程目录的lib文件夹下,然后右击并依次选择Build Path→Add to Build Path就添加了关于AsyncHttpClient的jar包。
(2)在使用SmartImageView之前也需要下载SmartImageView的jar包,网址为:https://github.com/loopj/android-smart-image-view,添加支持与AsyncHttpClient相同。
现在就可以创建我们的项目了。
结果图:
1.创建一个名为“newWeb”的应用程序,程序对应的布局文件(activity_main.xml)代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/loading" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="invisible"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载信息..." /> </LinearLayout> <ListView android:id="@+id/lv_news" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout></LinearLayout>
2.创建ListView Item的布局,由于使用了ListView控件,所以要创建news_item.xml,代码如下:
<?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="65dp"> <com.loopj.android.image.SmartImageView android:id="@+id/siv_icon" android:layout_width="80dp" android:layout_height="60dp" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"></com.loopj.android.image.SmartImageView> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="20" android:singleLine="true" android:text="我是标题" android:textColor="#000000" android:textSize="18sp" /> <TextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="16" android:maxLines="1" android:text="我是描述" android:textColor="#99000000" android:textSize="14sp" /> <TextView android:id="@+id/tv_type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="5dp" android:layout_marginRight="10dp" android:text="评论" android:textColor="#99000000" android:textSize="12sp" /></RelativeLayout>
3.创建NewsInfo类
在适配ListView的Item布局是使用到了NewaInfo JavaBean对象。NewsInfo类代码如下:
package com.example.administrator.newweb.entity;/** * Created by Administrator on 2017/5/18. */public class NewsInfo { private String iconPath; private String title; private String description; private int type; private long comment; public long getComment() { return comment; } public void setComment(long comment) { this.comment = comment; } public String getIconPath() { return iconPath; } public void setIconPath(String iconPath) { this.iconPath = iconPath; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getType() { return type; } public void setType(int type) { this.type = type; }}
4.创建工具类解析xml文件,由于从服务器上获取得失一个xml文件,因此需要使用XmlPulParser对象解析出xml里面的内容并设置到相应的JavaBean中,NewsInfoService类代码如下:
package com.example.administrator.newweb.dao;import android.util.Xml;import com.example.administrator.newweb.entity.NewsInfo;import org.xmlpull.v1.XmlPullParser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;/** * Created by 李小宁 on 2017/5/21. */public class NewsInfoService { //解析服务器返回的xml信息,获取所有新闻数据实体 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; //type不是文档结束 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(); } System.out.println(newsInfos+"00"); return newsInfos; }catch(Exception e) { e.printStackTrace(); System.out.println("123457789"); return null; } }}
5.编写界面交互代码(MainActivity):
package com.example.administrator.newweb;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;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 com.example.administrator.newweb.dao.NewsInfoService;import com.example.administrator.newweb.entity.NewsInfo;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import com.loopj.android.image.SmartImageView;import java.io.ByteArrayInputStream;import java.util.List;public class MainActivity extends AppCompatActivity { private ListView lv_news; private LinearLayout loading; private List<NewsInfo> newsInfos; //ListView适配 private class NewsAdapter extends BaseAdapter{ @Override public int getCount() { return newsInfos.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=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); //SmartImageView加载指定路径图片 siv.setImageUrl(newsInfo.getIconPath(),R.drawable.a,R.mipmap.ic_launcher); //设置新闻标题 tv_title.setText(newsInfo.getTitle()); //设置新闻描述 tv_description.setText(newsInfo.getDescription()); int type=newsInfo.getType(); //1.一般新闻2.专题3.live //不同新闻类型设置不同的颜色和不同的内容 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; } } @Override 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(); } //使用AsyncHttpClient访问网络 private void fillData2() { //创建AsyncHttpClient实例 AsyncHttpClient asyncHttpClient=new AsyncHttpClient(); //使用GET方法请求 asyncHttpClient.get(getString(R.string.serverurl),new AsyncHttpResponseHandler(){ public void onSuccess(String content){ //访问成功 super.onSuccess(content); //将字符串转换成Byte数组 byte[] bytes=content.getBytes(); //将Byte数组转成输入流 ByteArrayInputStream bais=new ByteArrayInputStream(bytes); //调用NewsInfoService工具类解析xml文件 newsInfos= NewsInfoService.getNewsInfos(bais); if(newsInfos==null){ //解析失败 弹出toast Toast.makeText(MainActivity.this,newsInfos+"",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); Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show(); } }); }}
6.配置服务器
由于需要从服务器上下载一个XML,因此需要开启tomcat服务器在tomcat根目录下找到bin文件夹,运行该文件夹下的startup.bat文件即可开启tomcat服务器。然后,在tomcat的安装目录打开webapps文件夹,将NewInfo.xml文件放置在ROOT文件夹下。NewInfo.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><news> <newsInfo> <icon>http://10.3.6.177:8080/images/a.PNG</icon> <title>科技改变世界</title> <content>进入一个更有爱的领域</content> <type>1</type> <comment>69</comment> </newsInfo> <newsInfo> <icon>http://10.3.6.177:8080/images/b.PNG</icon> <title>《神武》</title> <content>新美术资源盘点,视觉新体验</content> <type>2</type> <comment>35</comment> </newsInfo> <newsInfo> <icon>http://10.3.6.177:8080/images/c.PNG</icon> <title>南北车正式公布合并</title> <content>南北车将于今日正式公布合并</content> <type>3</type> <comment>2</comment> </newsInfo> <newsInfo> <icon>http://10.3.6.177:8080/images/d.PNG</icon> <title>萌呆了!汪星人抱玩偶酣睡</title> <content>汪星人抱玩偶酣睡,萌翻网友</content> <type>1</type> <comment>25</comment> </newsInfo> <newsInfo> <icon>http://10.3.6.177:8080/images/e.PNG</icon> <title>风力发电进校园</title> <content>风力发电普进校园</content> <type>2</type> <comment>26</comment> </newsInfo> <newsInfo> <icon>http://10.3.6.177:8080/images/f.PNG</icon> <title>地球一小时</title> <content>地球熄灯一小时</content> <type>1</type> <comment>23</comment> </newsInfo> <newsInfo> <icon>http://10.3.6.177:8080/images/g.PNG</icon> <title>最美公路</title> <content>最美公路,难以想象</content> <type>1</type> <comment>23</comment> </newsInfo></news>
- 新闻客户端案例开发
- 新闻客户端案例
- 案例--新闻客户端
- 简易新闻客户端案例
- 实现案例新闻客户端
- 新闻客户端案例
- 案例----新闻客户端
- 新闻客户端案例
- 案例-----新闻客户端
- 新闻客户端案例
- 简单新闻客户端案例
- 新闻客户端综合案例
- 案例—新闻客户端
- 新闻客户端案例
- 新闻客户端案例
- 案例-----简易新闻客户端
- Android 新闻客户端案例
- Android案例《新闻客户端》
- Hibernate关联关系映射---1对1
- Spring-Data-Redis之实例Demo
- Python中单词大小写正规化
- java并发底层实现原理
- Android 数据结构以及常用的算法
- 案例--新闻客户端
- TCP VEGAS
- MPI学习资料
- java基础day02
- 浅谈多线程生产者与消费者
- SSM框架集成
- 【颗粒归仓】--Zookeeper基本概念
- 149. Max Points on a Line
- File类