Android Volley 网络通信库学习,2021 最新腾讯 Android 高级面试题总结
"这里输入 URL 地址", new Listener<String>() {
@Override
public void onResponse(String response) {
// 处理返回请求返回的结果
}
}, new Erro
《Android 学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
rListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 请求出错,处理出错程序
}
});
将请求加入请求队列中:请求队列允许同时添加多个请求,也就是说,我们一次性可以添加多个请求到请求队列中
mQueue.add(stringRequest);
4.从网络取得 JSON 对象:
mQueue = Volley.newRequestQueue(getApplicationContext());
mQueue.add(new JsonObjectRequest(Method.GET, url, null,
new Listener() {
@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<String>() {
@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 构造函数的第二个参数是一个 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;
}
// ...
结语
看到这篇文章的人不知道有多少是和我一样的 Android 程序员。
35 岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。
我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。
千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。
有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到 35 岁甚至更晚才开始想起来要学习要进阶。
给大家一份系统的 Android 学习进阶资料,希望这份资料可以给大家提供帮助。

评论