Android框架Volley使用:ImageRequest请求实现图片加载
程序员文章站
2023-08-21 22:19:37
首先我们在项目中导入这个框架: 在AndroidManifest文件当中添加网络权限: 下面是我们的首页布局:在这个布局当中我们将Volley框架的所有功能都做成了一个按钮,按下按钮之后就会在“显示结果”下面显示结果,显示结果下面使用了一个ScrollView,并在ScrollView下面嵌套了一个 ......
首先我们在项目中导入这个框架:
implementation 'com.mcxiaoke.volley:library:1.0.19'
在androidmanifest文件当中添加网络权限:
<uses-permission android:name="android.permission.internet"/>
下面是我们的首页布局:
在这个布局当中我们将volley框架的所有功能都做成了一个按钮,按下按钮之后就会在“显示结果”下面显示结果,显示结果下面使用了一个scrollview,并在scrollview下面嵌套了一个textview和imageview,用于把我们加载成功之后的图片和文字进行显示。
下面是首页布局的代码:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".mainactivity"> <button android:id="@+id/get" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="get请求"/> <button android:id="@+id/post" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="post请求"/> <button android:id="@+id/json" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="请求json"/> <button android:id="@+id/imagerquest" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="imagerquest加载图片"/> <button android:id="@+id/imageloader" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="imageloader加载图片"/> <button android:id="@+id/networkimageview" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="networkimageview加载图片"/> <textview android:text="显示结果" android:textsize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <imageview android:visibility="gone" android:id="@+id/iv_volley" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.android.volley.toolbox.networkimageview android:id="@+id/network" android:visibility="gone" android:layout_width="200dp" android:layout_height="200dp" /> <scrollview android:layout_width="match_parent" android:layout_height="match_parent"> <textview android:id="@+id/tv_volley_result" android:layout_width="match_parent" android:layout_height="match_parent" /> </scrollview> </linearlayout>
为了实现imagerequest请求,进行imagerequest请求一共需要三步,分别是:
-
创建一个请求队列
-
创建一个请求
-
将创建的请求添加到请求队列当中
在创建请求的时候,必须同时写两个监听器,一个是实现请求,正确接受数据的回调,另一个是发生异常之后的回调。这里就直接采用了图片网址:
http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg
核心代码如下:
imagerequest.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { // 1 创建一个请求队列 requestqueue requestqueue = volley.newrequestqueue(mainactivity.this); // 2 创建一个图片的请求 string url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg"; imagerequest imagerequest = new imagerequest(url, new response.listener<bitmap>() { @override public void onresponse(bitmap bitmap) { // 正确接收到图片 iv.setvisibility(view.visible);//将图片设置为可见 iv.setimagebitmap(bitmap);//将接受到的图片bitmap对象传入到我们的imageview当中 } }, 0, 0, bitmap.config.rgb_565, new response.errorlistener() { //前面两个0,0的参数表示的是我们加载图片最大宽度和高度,后面的bitmap.config.rgb_565表示图片的质量 @override public void onerrorresponse(volleyerror volleyerror) { iv.setimageresource(r.drawable.test); } }); // 3 将请求添加到请求队列中 requestqueue.add(imagerequest); } });
全部主活动的java代码如下:
import android.graphics.bitmap; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.imageview; import android.widget.textview; import com.android.volley.authfailureerror; import com.android.volley.request; import com.android.volley.requestqueue; import com.android.volley.response; import com.android.volley.volleyerror; import com.android.volley.toolbox.imagerequest; import com.android.volley.toolbox.jsonarrayrequest; import com.android.volley.toolbox.jsonobjectrequest; import com.android.volley.toolbox.networkimageview; import com.android.volley.toolbox.stringrequest; import com.android.volley.toolbox.volley; import org.json.jsonobject; import java.util.hashmap; import java.util.map; public class mainactivity extends appcompatactivity { private button get; private button post; private button json; private button imagerequest; private button imageload; private button networkimageview; private imageview iv; private networkimageview network; private textview tv_volley_result; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); initlistener(); } public void initview()//把需要初始化的控件的逻辑都写在这里是一个很好的编程范式 { get=findviewbyid(r.id.get); post=findviewbyid(r.id.post); json=findviewbyid(r.id.json); imagerequest=findviewbyid(r.id.imagerquest); imageload=findviewbyid(r.id.imageloader); networkimageview=findviewbyid(r.id.networkimageview); iv=findviewbyid(r.id.iv_volley); network=findviewbyid(r.id.network); tv_volley_result=findviewbyid(r.id.tv_volley_result); } public void initlistener() { get.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { //创建一个请求队列 requestqueue requestqueue=volley.newrequestqueue(mainactivity.this); //创建一个请求 string url="http://gank.io/api/xiandu/category/wow"; stringrequest stringrequest=new stringrequest(url, new response.listener<string>() { //正确接受数据之后的回调 @override public void onresponse(string response) { tv_volley_result.settext(response); } }, new response.errorlistener() {//发生异常之后的监听回调 @override public void onerrorresponse(volleyerror error) { tv_volley_result.settext("加载错误"+error); } }); //将创建的请求添加到请求队列当中 requestqueue.add(stringrequest); } }); post.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { // 1 创建一个请求队列 requestqueue requestqueue = volley.newrequestqueue(mainactivity.this); // 2 创建一个post请求 string url = "http://api.m.mtime.cn/pagesubarea/trailerlist.api"; stringrequest stringrequest = new stringrequest(request.method.post, url, new response.listener<string>() { @override public void onresponse(string s) { tv_volley_result.settext(s); } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror volleyerror) { tv_volley_result.settext("请求失败" + volleyerror); } }) { @override protected map<string, string> getparams() throws authfailureerror { map<string, string> map = new hashmap<string, string>(); // map.put("value1","param1"); return map; } }; // 3 将post请求添加到队列中 requestqueue.add(stringrequest); } }); json.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { // 1 创建一个请求队列 requestqueue requestqueue = volley.newrequestqueue(mainactivity.this); // 2 创建一个请求 string url = "http://gank.io/api/xiandu/category/wow"; //jsonarrayrequest jsonobjectrequest2=...... jsonobjectrequest jsonobjectrequest = new jsonobjectrequest(url, null, new response.listener<jsonobject>() { @override public void onresponse(jsonobject jsonobject) { tv_volley_result.settext(jsonobject.tostring()); } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror volleyerror) { tv_volley_result.settext("请求失败" + volleyerror); } }); // 3 将创建的请求添加到请求队列中 requestqueue.add(jsonobjectrequest); //这一步完成之后就可以使用我们的json解析了 } }); imagerequest.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { // 1 创建一个请求队列 requestqueue requestqueue = volley.newrequestqueue(mainactivity.this); // 2 创建一个图片的请求 string url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg"; imagerequest imagerequest = new imagerequest(url, new response.listener<bitmap>() { @override public void onresponse(bitmap bitmap) { // 正确接收到图片 iv.setvisibility(view.visible);//将图片设置为可见 iv.setimagebitmap(bitmap);//将接受到的图片bitmap对象传入到我们的imageview当中 } }, 0, 0, bitmap.config.rgb_565, new response.errorlistener() { //前面两个0,0的参数表示的是我们加载图片最大宽度和高度,后面的bitmap.config.rgb_565表示图片的质量 @override public void onerrorresponse(volleyerror volleyerror) { iv.setimageresource(r.drawable.test); } }); // 3 将请求添加到请求队列中 requestqueue.add(imagerequest); } }); imageload.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { } }); networkimageview.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { } }); } }
得到下图:
则大吉大利,成功也!!
推荐阅读
-
Android框架Volley使用之Post请求实现方法
-
Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法
-
Android框架Volley使用之Json请求实现
-
Android框架Volley使用:ImageRequest请求实现图片加载
-
Android框架Volley使用:Json请求实现
-
Android框架Volley之:利用Imageloader和NetWorkImageView加载图片
-
Android框架Volley使用:Post请求实现
-
Android框架Volley使用:Get请求实现
-
Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 三 文件上传(支持多文件/多图片上传)
-
Android 9.0 网络请求适配,加载网络图片用Glide框架网络权限配置配好了,还是加载不出来图片