listView图文显示! 并且简单解决一下图片混乱问题
2015-11-10 20:08
579 查看
现在很多使用的应用中,都有一些图文兼并的消息展示,并且是列表形式实现的! 其中不乏有一些是使用的Listview来展示出来的. 今天简单的写了个demo再来回顾一下基础知识.
先来看看效果
现在来说说代码
这里我使用的是官方提供的Volley网络框架
在build中添加这个
MainActivity.java
NewsEntity.java
ListViewAdapter.java
activity_main.xml
list_item.xml
代码就这些 大牛勿喷. 同时大家可以使用一些简单易用的图片加载方法,但是要解决图片混乱好象有点繁琐,以后继续学学! UIL,Picasso,Fresco,Glide 等等很多 图片加载库.
还有可能大家学的抠脚json解析有点坑爹效率低,那么我推荐大家使用Gson, fastjson(据说是最快的).下面我简单记录一下使用方法.
Gson :
在build中添加这个
代码中
这个为实体类的最外层类名 与类对象 可以一层一层的扒扒!
只需要这两行就完事了
FastJson :
添加
代码使用 说明同上!
就这一行 是不是感觉好方便..哈哈 但是限制挺多的 json数据必须规范才行哦 !哈哈
互相交流 大牛勿喷!
代码下载地址! 点我啊
先来看看效果
现在来说说代码
这里我使用的是官方提供的Volley网络框架
在build中添加这个
dependencies { compile 'eu.the4thfloor.volley:com.android.volley:2015.05.28' }
MainActivity.java
package com.xyb.newslistview; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ListView listView; // 定义出listview private RequestQueue requestQueue; // 定义一个请求队列 使用volley包下的 官方产品棒棒哒! private String HTTPURL = "http://litchiapi.jstv.com/api/" + "GetFeeds?column=3&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41";//请求的网址 private ArrayList<NewsEntity.ParamzEntity.FeedsEntity.DataEntity> dataEntities = new ArrayList<>();// 坑爹的GsonFormat生成的 但是还真好用! private ListViewAdapter listViewAdapter; // listview必备是配置是也! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); requestQueue = Volley.newRequestQueue(this); initView();// 写个方法来初始化控件 initData();// 写个方法来设置数据 } private void initData() { /** * 第一个是请求的网址 * 第二个为请求成功的监听实现方法参数为解析到的String类型数据 * 第三个是请求失败监听,那就把你失败后要执行的方法写在这里 * **/ StringRequest stringRequest = new StringRequest(HTTPURL, new Response.Listener<String>() { @Override public void onResponse(String response) { try { // 原生的抠脚json解析,回顾回顾..... JSONObject jsonObject = new JSONObject(response); JSONObject object = jsonObject.getJSONObject("paramz"); JSONArray jsonArray = object.getJSONArray("feeds"); NewsEntity.ParamzEntity.FeedsEntity.DataEntity dataEntity; for (int i = 0; i < jsonArray.length(); i++) { // 将集合遍历额 JSONObject json = jsonArray.getJSONObject(i).getJSONObject("data"); String subject = json.getString("subject"); String summary = json.getString("summary"); String cover = "http://litchiapi.jstv.com" + json.getString("cover"); dataEntity = new NewsEntity.ParamzEntity.FeedsEntity.DataEntity(subject, summary, cover); dataEntities.add(dataEntity); } listViewAdapter.addNews(dataEntities);// 适配器中数据设置的方法将数据传递过去 notify一下 } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(stringRequest); // 请求需要加到队列中才能执行哦 这个是先执行哦 别看写在下面 哈哈 } /** * 初始化控件的方法 **/ private void initView() { listViewAdapter = new ListViewAdapter(this); listView = (ListView) findViewById(R.id.list); listView.setAdapter(listViewAdapter); } }
NewsEntity.java
package com.xyb.newslistview; /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-'====== `=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG */ import java.util.List; /*** * BY YanBinXie AT 15/11/10 下午3:08 */ public class NewsEntity { private String status; private ParamzEntity paramz; public void setStatus(String status) { this.status = status; } public void setParamz(ParamzEntity paramz) { this.paramz = paramz; } public String getStatus() { return status; } public ParamzEntity getParamz() { return paramz; } public static class ParamzEntity { private int PageIndex; private int PageSize; private int TotalCount; private int TotalPage; /** * id : 299058 * oid : 288328 * category : article * data : {"subject":"工作人员套取新农合565元被降级","summary":"昨天记者获悉,驻马店市纪委通报4起涉医领域违纪违法典型案件。","cover":"/Attachs/Article/288328/65b28e724f3b4a65ae7bb3f5c97699ab_padmini.JPG","pic":"","format":"txt","changed":"2015-09-19 19:35:53"} */ private List<FeedsEntity> feeds; public void setPageIndex(int PageIndex) { this.PageIndex = PageIndex; } public void setPageSize(int PageSize) { this.PageSize = PageSize; } public void setTotalCount(int TotalCount) { this.TotalCount = TotalCount; } public void setTotalPage(int TotalPage) { this.TotalPage = TotalPage; } public void setFeeds(List<FeedsEntity> feeds) { this.feeds = feeds; } public int getPageIndex() { return PageIndex; } public int getPageSize() { return PageSize; } public int getTotalCount() { return TotalCount; } public int getTotalPage() { return TotalPage; } public List<FeedsEntity> getFeeds() { return feeds; } public static class FeedsEntity { private int id; private int oid; private String category; /** * subject : 工作人员套取新农合565元被降级 * summary : 昨天记者获悉,驻马店市纪委通报4起涉医领域违纪违法典型案件。 * cover : /Attachs/Article/288328/65b28e724f3b4a65ae7bb3f5c97699ab_padmini.JPG * pic : * format : txt * changed : 2015-09-19 19:35:53 */ private DataEntity data; public void setId(int id) { this.id = id; } public void setOid(int oid) { this.oid = oid; } public void setCategory(String category) { this.category = category; } public void setData(DataEntity data) { this.data = data; } public int getId() { return id; } public int getOid() { return oid; } public String getCategory() { return category; } public DataEntity getData() { return data; } public static class DataEntity { private String subject; private String summary; private String cover; private String pic; private String format; private String changed; public DataEntity(String subject, String summary, String cover) { this.subject = subject; this.summary = summary; this.cover = cover; } public void setSubject(String subject) { this.subject = subject; } public void setSummary(String summary) { this.summary = summary; } public void setCover(String cover) { this.cover = cover; } public void setPic(String pic) { this.pic = pic; } public void setFormat(String format) { this.format = format; } public void setChanged(String changed) { this.changed = changed; } public String getSubject() { return subject; } public String getSummary() { return summary; } public String getCover() { return cover; } public String getPic() { return pic; } public String getFormat() { return format; } public String getChanged() { return changed; } } } } }
ListViewAdapter.java
package com.xyb.newslistview; /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-'====== `=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG */ import android.content.Context; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.NetworkImageView; import com.android.volley.toolbox.Volley; import java.util.ArrayList; /*** * BY YanBinXie AT 15/11/10 下午3:06 */ public class ListViewAdapter extends BaseAdapter { private Context context; private ArrayList<NewsEntity.ParamzEntity.FeedsEntity.DataEntity> newsEntities; private NetworkImageView iv; private ImageLoader imageLoader; public ListViewAdapter(Context context) { this.context = context; RequestQueue queue = Volley.newRequestQueue(context); imageLoader = new ImageLoader(queue, new ImageLoader.ImageCache() { int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory / 8; // imageLoader 最大缓存哦哦 private LruCache<String, Bitmap> mCache = new LruCache<>(cacheSize); @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } }); } public void addNews(ArrayList<NewsEntity.ParamzEntity.FeedsEntity.DataEntity> newsEntities) { this.newsEntities = newsEntities; notifyDataSetChanged(); } @Override public int getCount() { return newsEntities != null && newsEntities.size() > 0 ? newsEntities.size() : 0; } @Override public Object getItem(int position) { return newsEntities != null && newsEntities.size() > 0 ? newsEntities.get(position) : null; } @Override public long getItemId(int position) { return newsEntities != null && newsEntities.size() > 0 ? position : 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; /** * 这是一种实现方法 但是我感觉使用ViewHolder的方法比较好,这里偷懒了,, * */ TextView title,summary; if (convertView == null) { view = LayoutInflater.from(context).inflate(R.layout.list_item, null); } else { view = convertView; } iv = (NetworkImageView) view.findViewById(R.id.iv); summary = (TextView) view.findViewById(R.id.summary); title = (TextView) view.findViewById(R.id.title); summary.setText(newsEntities.get(position).getSummary()); title.setText(newsEntities.get(position).getSubject()); iv.setDefaultImageResId(R.mipmap.ic_launcher); iv.setErrorImageResId(R.mipmap.ic_launcher); iv.setImageUrl(newsEntities.get(position).getCover(), imageLoader); return view; } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="新闻listview" /> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/text" /> </RelativeLayout>
list_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="100dp"> <com.android.volley.toolbox.NetworkImageView android:id="@+id/iv" android:layout_width="80dp" android:layout_height="80dp" android:layout_centerVertical="true" android:padding="5dp"/> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_toRightOf="@id/iv" android:gravity="center_vertical" android:textSize="14sp" android:textStyle="bold" /> <TextView android:id="@+id/summary" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/title" android:layout_marginTop="8dp" android:layout_toRightOf="@id/iv" android:textSize="12sp" /> </RelativeLayout>
代码就这些 大牛勿喷. 同时大家可以使用一些简单易用的图片加载方法,但是要解决图片混乱好象有点繁琐,以后继续学学! UIL,Picasso,Fresco,Glide 等等很多 图片加载库.
还有可能大家学的抠脚json解析有点坑爹效率低,那么我推荐大家使用Gson, fastjson(据说是最快的).下面我简单记录一下使用方法.
Gson :
在build中添加这个
dependencies { compile 'com.google.code.gson:gson:2.2.4' }
代码中
这个为实体类的最外层类名 与类对象 可以一层一层的扒扒!
Gson gson = new Gson(); NewsEntity newsEntity = gson.fromJson(response, NewsEntity.class);
只需要这两行就完事了
FastJson :
添加
compile 'com.alibaba:fastjson:1.2.7'
代码使用 说明同上!
NewsEntity newsEntity = JSON.parseObject(response,NewsEntity.class);
就这一行 是不是感觉好方便..哈哈 但是限制挺多的 json数据必须规范才行哦 !哈哈
互相交流 大牛勿喷!
代码下载地址! 点我啊
相关文章推荐
- 与Java Web Service相关的若干概念(JAX-WS,JAX-RS)
- 【Android】 HttpClient 发送REST请求
- eclipse 任务管理器
- MySQL 源码编译安装报错 CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
- Android点击EditText文本框之外任何地方隐藏键盘的解决办法
- Tortoisesvn 如何在资源管理器中断开连接
- lintcode 中等题:unique Binary Search Tree 不同的二叉查找树
- 杭电3079 Vowel Counting
- 你不知道的JavaScript--Item30 数组进阶全掌握
- 设计模式--面向对象基础
- 杭电-1159Common Subsequence(LCS)
- Wildcard Matching
- 使用grunt合并压缩js、css文件
- AutoLayout(自动布局)入门
- 20135223何伟钦—第六章家庭作业
- 阿里云服务器远程mysql连不上
- Rational Rose 2003 下载、破解及安装方法(图文)
- HDU 1276 士兵队列训练问题 标记
- 插入排序
- sicily 14550 Interesting Integers