自定义ListView使用Volley获取数据

这是作为Volley框架使用的练习,如果对Volley框架的使用还不太熟悉, 建议先看前三篇文章:

Android Volley的使用(一)

Android Volley的使用(二)

Android Volley的使用(三)

本文代码github地址:UseVolley

要实现的效果如下:

Tips:以下大多数代码都是前三篇文章中详细介绍过的,在这里作为练习只提供一种思路,不再赘述

1,将Volley.jar添加进项目

获取Volley:

git clone 的方式

https://android.googlesource.com/platform/frameworks/volley 或者https://github.com/mcxiaoke/android-volley 你也可以直接下载 volley.jar

如果你是通过git clone方式,为了生成voller.jar你需要在你clone的volley目录下执行:

android update project -pant jar

将Volley添加进项目:

将volley.jar粘贴进libs文件夹下,然后右键volley.jar文件,选择Add as Library2,创建ApplictionController类{String TAG= ApplicationController.class.getSimpleName();private RequestQueue requestQueue;private ImageLoader imageLoader;private static ApplicationController mInstance;() {super.onCreate();mInstance=this;}ApplicationController getInstance(){return mInstance;}public RequestQueue getRequestQueue(){if(requestQueue==null)requestQueue= Volley.newRequestQueue(getApplicationContext());return requestQueue;}public ImageLoader getImageLoader(){getRequestQueue();if(imageLoader==null){imageLoader=new ImageLoader(requestQueue,new LruBitmapCache());}return imageLoader;}public <T> void addToRequestQueue(Request<T> req,String tag){req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);getRequestQueue().add(req);}public <T> void addToRequestQueue(Request<T> req){req.setTag(TAG);getRequestQueue().add(req);}(Object tag){if(requestQueue!=null){requestQueue.cancelAll(tag);} } }3,创建LruBitmapCache类 getDefaultLruCacheSize(){final int maxMemory= (int) (Runtime.getRuntime().maxMemory()/1024);final int cacheSize=maxMemory/8;return cacheSize;}public LruBitmapCache(){this(getDefaultLruCacheSize());}public LruBitmapCache(int sizeInKiloBytes) {super(sizeInKiloBytes);}@Overrideprotected int sizeOf(String key, Bitmap value) {return value.getRowBytes() * value.getHeight() / 1024;}@Overridepublic Bitmap getBitmap(String url) {return get(url);}@Overridepublic void putBitmap(String url, Bitmap bitmap) {put(url, bitmap);}}4,Manifest.xml===”android.permission.ACCESS_NETWORK_STATE”/><application==”@style/AppTheme” ><activity===></application></manifest>

以下这部分主要涉及如何自定义ListView视图,自定义Adapter

5,布局文件

activity_main.xml中添加一个ListView

==”match_parent”><ListView==>

ListView中Item的视图:

在layout文件夹下创建movie_list_item.xml

这里的ImageView用的是Volley中的NetworkImageView,当然也可以直接用ImageView,二者稍有区别,详见Android Volley的使用(三)

布局我们可以采用RelativeLayout

==”match_parent”android:layout_height=”wrap_content”><com.android.volley.toolbox.NetworkImageView==”80dp” /><TextView===”wrap_content”android:layout_height=”wrap_content” /><TextView===”match_parent”android:layout_height=”wrap_content” /><TextView===”wrap_content” /></RelativeLayout>6,定义数据模型:Movie

由于这里需要用数据请求,因此我创建了一个关于电影的Json数据movies.json,至于json数据的创建和服务端不是这次的内容,故不再说明,有兴趣的同学自己去了解。返回的数据格式如下:

所以我们需要定义一个movie类:

public class Movie {private String name;private String rating;private String image;private String year;(String name) {this.name = name;}(String rating) {this.rating = rating;}(String imageUrl) {this.image = imageUrl;}(String year) {this.year = year;}public String getName() {return name;}public String getRating() {return rating;}public String getYear() {return year;}public String getImage() {return image;}public Movie(){}public Movie(String name,String rating,String imageUrl,String year){this.name=name;this.rating=rating;this.image=imageUrl;this.year=year;}}7,自定义适配器类:MovieAdapter大把大把的时光从指缝间遛走,

自定义ListView使用Volley获取数据

相关文章:

你感兴趣的文章:

标签云: