Android Volley网络通信库学习,轻松拿到了阿里Android高级开发工程师的offer

本文介绍了如何使用Volley库进行POST请求,包括设置请求参数,并展示了如何实现图片加载缓存机制,利用LruCache和NetworkImageView进行高效图片显示。同时,提到了在网络请求生命周期管理中的注意事项。
摘要由CSDN通过智能技术生成

@Override

public void onResponse(JSONObject response) {

Log.d(TAG, "response : " + response.toString());

}

}, null));

mQueue.start();

Post


其他步骤与Get请求一致,在第二步创建Request的时候,我们只要将传入的第一个参数改为 Method.POST;

如果有Post数据,我们需要重写getParams方法(观察过Volley源码的同学可以看到,源码中getParams函数返回的一个null,所以我们要重写该函数)

StringRequest stringRequest = new StringRequest(Method.POST,

“这里输入URL地址”, new Listener() {

@Override

public void onResponse(String response) {

// 处理返回请求返回的结果

}

}, new ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

// 请求出错,处理出错程序

}

}) {

@Override

protected Map<String, String> getParams() throws AuthFailureError {

// 在这里设置需要post的参数

Map<String, String> params = new HashMap<String, String>();

params.put(“key1”, “value1”);

params.put(“key2”, “value2”);

return params;

}

};

图片加载缓存机制


1.创建一个请求队列:

RequestQueue mQueue = Volley.newRequestQueue(this)

图片缓存类:

import android.graphics.Bitmap;

import android.util.LruCache;

import com.android.volley.toolbox.ImageLoader.ImageCache;

class BitmapCache implements ImageCache {

private LruCache<String, Bitmap> mCache;

public BitmapCache() {

// 缓存10M

int maxSize = 10 * 1024 * 1024;

mCache = new LruCache<String, Bitmap>(maxSize) {

@Override

protected int sizeOf(String key, Bitmap bitmap) {

return bitmap.getRowBytes() * bitmap.getHeight();

}

};

}

@Override

public Bitmap getBitmap(String url) {

return mCache.get(url);

}

@Override

public void putBitmap(String url, Bitmap bitmap) {

mCache.put(url, bitmap);

}

};

创建一个图片加载对象:

ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());

创建图片的监听器

ImageListener listener = ImageLoader.getImageListener(imageView,

R.drawable.ic_launcher, R.drawable.ic_launcher);

第一个参数表示显示图片的控件,第二个参数表示加载图片时显示的图片,第三个参数表示出错时的图片显示。

加载图片到控件中:

imageLoader.get(“http://avatar.csdn.net/A/6/4/1_zhoumushui.jpg”,listener);

ImageLoader的方法都需要从主线程里来调用。

NetworkImageView


com.android.volley.NetworkImageView

Volley提供了的一个新控件来代替传统的ImageView:

mImageView.setImageUrl(url, imageLoader)

这个控件在被从父控件detach的时候,会自动取消网络请求的,即完全不用我们担心相关网络请求的生命周期问题。

示例代码:

mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());

// ImageLoader构造函数的第二个参数

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

浏览器打开:qq.cn.hn/FTe 免费领取

是一个ImageCache的实例(严格来说,是实现ImageCache接口的某具体类的实例)

… …

if(holder.imageRequest != null) {

holder.imageRequest.cancel();

}

holder.imageRequest = mImageLoader.get(BASE_UR + item.image_url, holder.imageView, R.drawable.loading, R.drawable.error);

架构设计


这里写图片描述

如果在一个Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,如果Activity被结束了,我们需要做以下处理:

@Override

public void onPostExecute(Result r) {

if (getActivity() == null) {

return;

}

// …

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值