首先我们在项目中导入这个框架:

  1. implementation 'com.mcxiaoke.volley:library:1.0.19'

在AndroidManifest文件当中添加网络权限:

  1. <uses-permission android:name="android.permission.INTERNET"/>

下面是我们的首页布局:
在这个布局当中我们将Volley框架的所有功能都做成了一个按钮,按下按钮之后就会在“显示结果”下面显示结果,显示结果下面使用了一个ScrollView,并在ScrollView下面嵌套了一个Textview和Imageview,用于把我们加载成功之后的图片和文字进行显示。

下面是首页布局的代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. tools:context=".MainActivity">
  9. <Button
  10. android:id="@+id/get"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:text="Get请求"/>
  14. <Button
  15. android:id="@+id/post"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:text="Post请求"/>
  19. <Button
  20. android:id="@+id/json"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:text="请求JSON"/>
  24. <Button
  25. android:id="@+id/ImageRquest"
  26. android:layout_width="match_parent"
  27. android:layout_height="wrap_content"
  28. android:text="ImageRquest加载图片"/>
  29. <Button
  30. android:id="@+id/ImageLoader"
  31. android:layout_width="match_parent"
  32. android:layout_height="wrap_content"
  33. android:text="ImageLoader加载图片"/>
  34. <Button
  35. android:id="@+id/NetWorkImageView"
  36. android:layout_width="match_parent"
  37. android:layout_height="wrap_content"
  38. android:text="NetWorkImageView加载图片"/>
  39. <TextView
  40. android:text="显示结果"
  41. android:textSize="20sp"
  42. android:layout_width="wrap_content"
  43. android:layout_height="wrap_content" />
  44. <ImageView
  45. android:visibility="gone"
  46. android:id="@+id/iv_volley"
  47. android:layout_width="wrap_content"
  48. android:layout_height="wrap_content" />
  49. <com.android.volley.toolbox.NetworkImageView
  50. android:id="@+id/NetWork"
  51. android:visibility="gone"
  52. android:layout_width="200dp"
  53. android:layout_height="200dp" />
  54. <ScrollView
  55. android:layout_width="match_parent"
  56. android:layout_height="match_parent">
  57. <TextView
  58. android:id="@+id/tv_volley_result"
  59. android:layout_width="match_parent"
  60. android:layout_height="match_parent" />
  61.  
  62. </ScrollView>
  63. </LinearLayout>

为了实现Json请求,进行Json请求一共需要三步,分别是:

    1. 创建一个请求队列
    1. 创建一个请求
    1. 将创建的请求添加到请求队列当中

在创建请求的时候,必须同时写两个监听器,一个是实现请求,正确接受数据的回调,另一个是发生异常之后的回调。这里我们准备了json数据,是在gank.io的官网上找的,大家可以自行百度一下,这里就直接采用了网址:

网址:

  1. http://gank.io/api/xiandu/category/wow

当中的json数据进行json请求了,只要我们在文本显示区返回的数据和这个网站上面的数据显示相同,则请求成功。如果不同也会显示出错误的原因。

在我们进行请求的时候,如果发现我们被请求的json数据是以中括号开头的则使用

  1. JsonArrayRequest
    来创建对象,否则则使用下面代码当中的:
  1. JsonObjectRequest
    来创建对象

核心代码如下:

  1. json.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View view) {
  4. // 1 创建一个请求队列
  5. RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
  6.  
  7. // 2 创建一个请求
  8. String url = "http://gank.io/api/xiandu/category/wow";
  9. //JsonArrayRequest jsonObjectRequest2=......
  10. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
  11. @Override
  12. public void onResponse(JSONObject jsonObject) {
  13. tv_volley_result.setText(jsonObject.toString());
  14. }
  15. }, new Response.ErrorListener() {
  16. @Override
  17. public void onErrorResponse(VolleyError volleyError) {
  18. tv_volley_result.setText("请求失败" + volleyError);
  19. }
  20. });
  21.  
  22. // 3 将创建的请求添加到请求队列中
  23. requestQueue.add(jsonObjectRequest);
  24.  
  25. //这一步完成之后就可以使用我们的json解析了
  26.  
  27. }
  28. });

全部主活动的Java代码如下:

  1. import android.support.v7.app.AppCompatActivity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. import android.widget.ImageView;
  6. import android.widget.TextView;
  7.  
  8. import com.android.volley.AuthFailureError;
  9. import com.android.volley.Request;
  10. import com.android.volley.RequestQueue;
  11. import com.android.volley.Response;
  12. import com.android.volley.VolleyError;
  13. import com.android.volley.toolbox.JsonArrayRequest;
  14. import com.android.volley.toolbox.JsonObjectRequest;
  15. import com.android.volley.toolbox.NetworkImageView;
  16. import com.android.volley.toolbox.StringRequest;
  17. import com.android.volley.toolbox.Volley;
  18.  
  19. import org.json.JSONObject;
  20.  
  21. import java.util.HashMap;
  22. import java.util.Map;
  23.  
  24. public class MainActivity extends AppCompatActivity {
  25. private Button get;
  26. private Button post;
  27. private Button json;
  28. private Button imagerequest;
  29. private Button imageload;
  30. private Button netWorkImageView;
  31.  
  32. private ImageView iv;
  33. private NetworkImageView network;
  34. private TextView tv_volley_result;
  35. @Override
  36. protected void onCreate(Bundle savedInstanceState) {
  37. super.onCreate(savedInstanceState);
  38. setContentView(R.layout.activity_main);
  39. initview();
  40. initListener();
  41.  
  42. }
  43. public void initview()//把需要初始化的控件的逻辑都写在这里是一个很好的编程范式
  44. {
  45.  
  46. get=findViewById(R.id.get);
  47. post=findViewById(R.id.post);
  48. json=findViewById(R.id.json);
  49. imagerequest=findViewById(R.id.ImageRquest);
  50. imageload=findViewById(R.id.ImageLoader);
  51. netWorkImageView=findViewById(R.id.NetWorkImageView);
  52. iv=findViewById(R.id.iv_volley);
  53. network=findViewById(R.id.NetWork);
  54. tv_volley_result=findViewById(R.id.tv_volley_result);
  55.  
  56. }
  57. public void initListener()
  58. {
  59. get.setOnClickListener(new View.OnClickListener() {
  60. @Override
  61. public void onClick(View view) {
  62. //创建一个请求队列
  63. RequestQueue requestQueue=Volley.newRequestQueue(MainActivity.this);
  64. //创建一个请求
  65. String url="http://gank.io/api/xiandu/category/wow";
  66. StringRequest stringRequest=new StringRequest(url, new Response.Listener<String>() {
  67. //正确接受数据之后的回调
  68. @Override
  69. public void onResponse(String response) {
  70. tv_volley_result.setText(response);
  71. }
  72. }, new Response.ErrorListener() {//发生异常之后的监听回调
  73. @Override
  74. public void onErrorResponse(VolleyError error) {
  75. tv_volley_result.setText("加载错误"+error);
  76. }
  77. });
  78. //将创建的请求添加到请求队列当中
  79. requestQueue.add(stringRequest);
  80. }
  81. });
  82.  
  83. post.setOnClickListener(new View.OnClickListener() {
  84. @Override
  85. public void onClick(View view) {
  86. // 1 创建一个请求队列
  87. RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
  88.  
  89. // 2 创建一个post请求
  90. String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
  91. StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
  92. @Override
  93. public void onResponse(String s) {
  94. tv_volley_result.setText(s);
  95. }
  96. }, new Response.ErrorListener() {
  97. @Override
  98. public void onErrorResponse(VolleyError volleyError) {
  99. tv_volley_result.setText("请求失败" + volleyError);
  100. }
  101. }) {
  102. @Override
  103. protected Map<String, String> getParams() throws AuthFailureError {
  104.  
  105. Map<String, String> map = new HashMap<String, String>();
  106. // map.put("value1","param1");
  107.  
  108. return map;
  109. }
  110. };
  111.  
  112. // 3 将post请求添加到队列中
  113. requestQueue.add(stringRequest);
  114.  
  115. }
  116. });
  117.  
  118. json.setOnClickListener(new View.OnClickListener() {
  119. @Override
  120. public void onClick(View view) {
  121. // 1 创建一个请求队列
  122. RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
  123.  
  124. // 2 创建一个请求
  125. String url = "http://gank.io/api/xiandu/category/wow";
  126. //JsonArrayRequest jsonObjectRequest2=......
  127. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
  128. @Override
  129. public void onResponse(JSONObject jsonObject) {
  130. tv_volley_result.setText(jsonObject.toString());
  131. }
  132. }, new Response.ErrorListener() {
  133. @Override
  134. public void onErrorResponse(VolleyError volleyError) {
  135. tv_volley_result.setText("请求失败" + volleyError);
  136. }
  137. });
  138.  
  139. // 3 将创建的请求添加到请求队列中
  140. requestQueue.add(jsonObjectRequest);
  141.  
  142. //这一步完成之后就可以使用我们的json解析了
  143.  
  144. }
  145. });
  146.  
  147. imagerequest.setOnClickListener(new View.OnClickListener() {
  148. @Override
  149. public void onClick(View view) {
  150.  
  151. }
  152. });
  153.  
  154. imageload.setOnClickListener(new View.OnClickListener() {
  155. @Override
  156. public void onClick(View view) {
  157.  
  158. }
  159. });
  160.  
  161. netWorkImageView.setOnClickListener(new View.OnClickListener() {
  162. @Override
  163. public void onClick(View view) {
  164.  
  165. }
  166. });
  167.  
  168. }
  169. }

得到下图:

则成功也

  1.  
  1.  

Android框架Volley使用:Json请求实现的更多相关文章

  1. Android框架-Volley(一)

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  2. 【Android】Volley做网络请求的几种用法

    前言: 最近在将自己写的烂代码重构,以前使用的网络请求全是基于apache的HttpClient,简单使用还好,使用多了发现重复代码太多,而且每次使用都很繁琐,因此在网上找了半天网络请求的相关类库,最 ...

  3. Android框架Volley之:ImageRequest请求实现图片加载

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...

  4. Android框架Volley使用:Post请求实现

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...

  5. Android框架Volley使用:Get请求实现

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...

  6. Android框架Volley之:利用Imageloader和NetWorkImageView加载图片

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...

  7. Android框架-Volley(三)

    经过前面两篇文章的学习,我们已经掌握了Volley各种Request的使用方法,包括StringRequest.JsonRequest.ImageRequest等.其中StringRequest用于请 ...

  8. Android框架-Volley(二)

    1. ImageRequest的用法 前面我们已经学习过了StringRequest和JsonRequest的用法,并且总结出了它们的用法都是非常类似的,基本就是进行以下三步操作即可: 1. 创建一个 ...

  9. Android框架-Volley(四)

    经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚.因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地 ...

随机推荐

  1. .WrongArgumentException: Malformed database URL, failed to parse the connection string near ';characterEncoding=UTF-8&;serverTimezone=Asia/Shanghai'.)

    连接mysql库报的异常信息: org.springframework.transaction.CannotCreateTransactionException: Could not open JDB ...

  2. Add an Item to the New Action 在新建按钮中增加一个条目

    In this lesson, you will learn how to add an item to the New Action (NewObjectViewController.NewObje ...

  3. cmdb项目-2

    1.命令插件异常处理 + 日志采集 1)为了更清楚发送客户端收集信息的状态 ,优化返回api的数据 ,变为字典存储 {状态 错误信息 数据} ,因为每个插件的每种系统下都要这个返回值我们将他单独做成类 ...

  4. gdisk分区及swap分区

    gdisk分区及swap分区 gdisk分区,分区表是GPT,支持更大的分区,128G gdisk分区 一,添加硬盘 二,分区 1,安装gdisk [root@oldboy ~]# yum insta ...

  5. 27-限制容器的 Block IO

    Block IO 是另一种可以限制容器使用的资源.Block IO 指的是磁盘的读写,docker 可通过设置权重.限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论. 注:目前 ...

  6. SQL Server通过函数把逗号分隔的字符串拆分成数据列表的脚本-干货

    CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=',',@string NVARCHAR(MAX))  RETURNS @ResultTab ...

  7. [日常] win10开启和安装ubuntu子系统

    在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统 在微软商店里搜索ubuntu,直接点击安装就可以了 安装完成后的windows与linux的磁盘映射见 ...

  8. bps和pps

    bps,比特率指的是每秒传输比特数 在实际所说的1M带宽的意思是1Mbps(是兆比特每秒Mbps不是兆字节每秒MBps) pps(数据包每秒),常用的网络吞吐率的单位(即每秒发送多少个分组数据包),网 ...

  9. Java学习笔记(7)---流(Stream),文件(File)

    1.Stream流 a.定义: Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集 ...

  10. Modbus 协议

    转载:https://www.cnblogs.com/DreamRecorder/p/9081127.html 一.Modbus 协议简介     Modbus 协议是应用于电子控制器上的一种通用语言 ...