Android框架Volley使用之Json请求实现
首先我们在项目中导入这个框架:
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>
为了实现json请求,进行json请求一共需要三步,分别是:
1.创建一个请求队列
2.创建一个请求
3.将创建的请求添加到请求队列当中
在创建请求的时候,必须同时写两个监听器,一个是实现请求,正确接受数据的回调,另一个是发生异常之后的回调。这里我们准备了json数据,是在gank.io的官网上找的,大家可以自行百度一下,这里就直接采用了网址:
网址:
当中的json数据进行json请求了,只要我们在文本显示区返回的数据和这个网站上面的数据显示相同,则请求成功。如果不同也会显示出错误的原因。
在我们进行请求的时候,如果发现我们被请求的json数据是以中括号开头的则使用
jsonarrayrequest
来创建对象,否则则使用下面代码当中的:
jsonobjectrequest
来创建对象
核心代码如下:
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解析了 } });
全部主活动的java代码如下:
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.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) { } }); imageload.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { } }); networkimageview.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { } }); } }
得到下图:
总结
以上所述是小编给大家介绍的android框架volley使用之json请求实现,希望对大家有所帮助
上一篇: 红糖怎样做?有这些就足够了!
下一篇: 为什么喝茶,原来有这么多讲究