写点什么

Android Volley 网络通信库学习,2021 最新腾讯 Android 高级面试题总结

作者:嘟嘟侠客
  • 2021 年 11 月 27 日
  • 本文字数:2136 字

    阅读完需:约 7 分钟

"这里输入 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 学习进阶资料,希望这份资料可以给大家提供帮助。



本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

用户头像

嘟嘟侠客

关注

还未添加个人签名 2021.03.19 加入

还未添加个人简介

评论

发布
暂无评论
Android Volley网络通信库学习,2021最新腾讯Android高级面试题总结