新闻客户端(AsyncHttpClient和SmartImageView的综合使用
来源:互联网 发布:php在线考试系统源码 编辑:程序博客网 时间:2024/05/22 08:20
1.创建程序xinwenkehuduan
a.布局文件如下所示:
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.bz0209.xinwenkehuduan.MainActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/loading" android:visibility="invisible" android:gravity="center" android:orientation="vertical"> <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:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv_news"> </ListView> </FrameLayout></LinearLayout>
b.界面如下1-1所示:
1-1 1-2
2.创建ListView Item的布局:
a.ListView的Item布局文件如下所示:
<?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="65dip"> <com.loopj.android.image.SmartImageView android:id="@id/siv_icon" android:layout_width="80dip" android:layout_height="60dip" android:layout_alignParentLeft="true" android:layout_marginButtom="5dip" android:layout_marginLeft="5dip" android:layout_marginTop="5dip" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher"> </com.loopj.android.image.SmartImageView> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dip" android:layout_marginTop="10dip" android:layout_toRightOf="@+id/siv_icon" android:text="我是标题" android:maxLength="20" android:singleLine="true" android:ellipsize="end" 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="5dip" android:layout_marginTop="5dip" android:layout_toRightOf="@+id/siv_icon" android:text="我是描述" android:maxLength="16" android:singleLine="true" android:ellipsize="end" 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="5dip" android:text="评论" android:textColor="#99000000" android:textSize="12sp" /></RelativeLayout>
b.界面如图1-2所示。
3.编写界面交互代码如下所示:
a.用于实现获取服务器的NewsInfo.xml文件解析并将解析的信息设置到ListView显示在界面上。
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.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; private class NewsAdapter extends BaseAdapter{ @Override 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); NewsInfo newsInfo = newsInfos.get(position); siv.setImageUrl(newsInfo.getIconPath(), R.drawable.ab, 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(getString(android.R.string.serverurl)),new AsyncHttpResponHandler(){ 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,"解析失败",0).show(); }else{ loading.setVisibility(View.INVISIBLE); lv_news.steAdapter(new NewsAdapter()); } } public void onFailure(Throwable error,String content){ super.onFailure(error.content); Toast.makeText(MainActivity.this,"请求失败",0).show(); } }; } }
4.创建NewsInfo类
a.具体代码如下:
public class NewsInfo { private String iconPath; private String title; private String description; private int type; private long 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; } public long getComment() { return comment; } public void setComment(long comment) { this.comment = comment; }}
4..创建工具NewsInfoService类解析Xml文件
a.具体代码如下:
import android.util.Xml;import android.widget.Switch;import org.xmlpull.v1.XmlPullParser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;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; } }}
6.配置服务器:
a.启动tomcat服务器,在tomcat根目录下找bin文件夹,运行tomcat服务器,在tomcat的安装目录下打开webapps文件夹,将NewsInfo.xml文件放置在ROOT文件夹下,NewsInfo.xml代码如下:
<new> <newsInfo> <icom>http://172.16.25.13:8080/img/a.jpg</icom> <title>科技温暖世界</title> <type>1</type> <comment>69</comment> </newsInfo> <newsInfo> <icom>http://172.16.25.13:8080/img/b.jpg</icom> <title>《神武》</title> <content>新美术资源盘点 视觉新体验</content> <type>2</type> <comment>35</comment> </newsInfo> <newsInfo> <icom>http://172.16.25.13:8080/img/c.jpg</icom> <title>南北车正式公布合并</title> <content>南北车将于今日正式公布合并</content> <type>3</type> <comment>2</comment> </newsInfo> <newsInfo> <icom>http://172.16.25.13:8080/img/d.jpg</icom> <title>北京拟推医生电子注册</title> <content>突破多点执业“限制”</content> <type>1</type> <comment>25</comment> </newsInfo> <newsInfo> <icom>http://172.16.25.13:8080/img/e.jpg</icom> <title>风力发电进校园</title> <content>风力发电普进校园</content> <type>2</type> <comment>26</comment> </newsInfo> <newsInfo> <icom>http://172.16.25.13:8080/img/f.jpg</icom> <title>地球一小时</title> <content>地球熄灯一小时</content> <type>1</type> <comment>23</comment> </newsInfo></new>
7.JSON文件:
http://www.qqe2.com/ json在线编辑器
8.运行图如下所示:
阅读全文
0 0
- 新闻客户端(AsyncHttpClient和SmartImageView的综合使用)
- AsyncHttpClient和SmartImageView的综合使用--新闻客户端
- 新闻客户端(AsyncHttpClient和SmartImageView的综合使用
- AsyncHttpClient和SmartImageView的综合使用--新闻客户端
- Android中综合使用AsyncHttpClient和SmartImageView编写新闻客户端的案例
- AsyncHttpClient和SmartImageView的使用及案例(新闻客户端)
- Android---SmartImageView和AsyncHttpClient的应用之《新闻客户端》案例
- Android-----AsyncHttpClient和SmartImageView的概述和使用---案例《新闻客户端》
- 实验:android案例——新闻客户端(使用开源项目AsyncHttpClient和SmartImageView)
- 新闻客户端——SmartImageView——AsyncHttpClient
- AsynHttpClient和SmartImageView控件的使用
- 新闻客户端综合案例
- AsyncHttpClient的介绍和使用
- SmartImageView的使用
- SmartImageView的简单使用
- 新闻客户端案例——(AsycHttpClient,SmartImageView,JSON)
- AsynHttpClient和SmartImageView控件做一个新闻发布系统
- SmartImageView使用
- Java虚拟机笔记--2
- Spring 注解大全
- QTP应用实例-G.8032测试自动化(4)数据扩展
- 将多个jar包重新打包成一个jar包
- 《Kali+Linux渗透测试的艺术》学习总结之----概要
- 新闻客户端(AsyncHttpClient和SmartImageView的综合使用
- zookeeper集群(二)
- 灰度发布
- Qt 程序异常结束 (MinGW 与 MSVC 版本切换)
- 在Android加入和使用Realm
- NumPy-快速处理数据
- Oracle数据库学习---查询语句
- elasticsearch学习笔记(二)
- Oracle EBS 问题集锦