IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Code For Better 谷歌开发者之声——Android 中的 Volley 库 -> 正文阅读

[移动开发]Code For Better 谷歌开发者之声——Android 中的 Volley 库

Volley是一个HTTP 库,它使 Android 应用程序的网络变得非常简单和快速。它由 Google 开发并在 2013 年 Google I/O 期间推出。它的开发是因为 Android SDK 中缺少能够在不影响用户体验的情况下工作的网络类。尽管 Volley 是 Android 开源项目 (AOSP) 的一部分,但 Google 在 2017 年 1 月宣布 Volley 将迁移到一个独立的库。它管理网络请求的处理和缓存,并节省开发人员一次又一次编写相同的网络调用/缓存代码的宝贵时间。Volley不适合大型下载或流式操作,因为 Volley 在解析期间将所有响应保存在内存中。

Volley 的特点

1.请求排队和优先级
2.有效的请求缓存和内存管理
3.库的可扩展性和定制化以满足我们的需求
4.取消请求

使用 Volley 的优势

1.所有需要在 Android 中使用 Networking 完成的任务,都可以在 Volley 的帮助下完成。
2.网络请求的自动调度。
3.捕捉。
4.多个并发网络连接。
5.取消请求 API。
6.请求优先级。
7.Volley 提供调试和跟踪工具。

如何导入 Volley 并添加权限

在开始使用 Volley 之前,需要在 Android 项目中导入 Volley 并添加权限。这样做的步骤如下:

创建一个新项目。打开build.gradle(Module: app)并添加以下依赖项:

dependencies{ 
    //...
    implementation 'com.android.volley:volley:1.0.0'
}

AndroidManifest.xml添加互联网权限:

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

Volley Library 中的类别

Volley 有两个主要类别:

1.请求队列:将请求分发到网络时使用的兴趣。如果需要,可以根据需要创建一个请求队列,但通常它是在启动时的早期创建的,并保留它并将其用作 Singleton。
2.请求:进行 Web API 调用的所有必要信息都存储在其中。它是创建网络请求(GET、POST)的基础。

使用 Volley 库的请求类型

字符串请求

String url = "https:// string_url/";
StringRequest
	stringRequest
	= new StringRequest(
		Request.Method.GET,
		url,
		new Response.Listener() {
			@Override
			public void onResponse(String response)
			{
			}
		},
		new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error)
			{
			}
		});
requestQueue.add(stringRequest);
</pre>

JSON对象请求

String url = "https:// json_url/";
JsonObjectRequest
	jsonObjectRequest
	= new JsonObjectRequest(
		Request.Method.GET,
		url,
		null,
		new Response.Listener() {
			@Override
			public void onResponse(JSONObject response)
			{
			}
		},
		new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error)
			{
			}
		});
requestQueue.add(jsonObjectRequest);

JSONArray 请求

JsonArrayRequest
	jsonArrayRequest
	= new JsonArrayRequest(
		Request.Method.GET,
		url,
		null,
		new Response.Listener() {
			@Override
			public void onResponse(JSONArray response)
			{
			}
		},
		new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error)
			{
			}
		});
requestQueue.add(jsonArrayRequest);

图片请求

int max - width = ...;
int max_height = ...;

String URL = "http:// image_url.png";

ImageRequest
	imageRequest
	= new ImageRequest(URL,
					new Response.Listener() {
						@Override
						public void
						onResponse(Bitmap response)
						{
							// Assign the response
							// to an ImageView
							ImageView
								imageView
								= (ImageView)
									findViewById(
										R.id.imageView);

							imageView.setImageBitmap(response);
						}
					},
					max_width, max_height, null);

requestQueue.add(imageRequest);

添加帖子参数

String tag_json_obj = "json_obj_req";

String
	url
	= "https:// api.xyz.info/volley/person_object.json";

ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...PLease wait");
pDialog.show();

JsonObjectRequest
	jsonObjReq
	= new JsonObjectRequest(
		Method.POST,
		url,
		null,
		new Response.Listener() {

			@Override
			public void onResponse(JSONObject response)
			{
				Log.d(TAG, response.toString());
				pDialog.hide();
			}
		},
		new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error)
			{
				VolleyLog.d(TAG, "Error: "
									+ error.getMessage());
				pDialog.hide();
			}
		}) {

		@Override
		protected Map getParams()
		{
			Map params = new HashMap();
			params.put("name", "Androidhive");
			params.put("email", "abc@androidhive.info");
			params.put("password", "password123");

			return params;
		}

	};

AppController.getInstance()
	.addToRequestQueue(jsonObjReq, tag_json_obj);

添加请求标头

String tag_json_obj = "json_obj_req";

String
	url
	= "https:// api.androidhive.info/volley/person_object.json";

ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();

JsonObjectRequest
	jsonObjReq
	= new JsonObjectRequest(
		Method.POST,
		url,
		null,
		new Response.Listener() {

			@Override
			public void onResponse(JSONObject response)
			{
				Log.d(TAG, response.toString());
				pDialog.hide();
			}
		},
		new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error)
			{
				VolleyLog.d(TAG, "Error: "
									+ error.getMessage());
				pDialog.hide();
			}
		}) {

		@Override
		public Map getHeaders() throws AuthFailureError
		{
			HashMap headers = new HashMap();
			headers.put("Content-Type", "application/json");
			headers.put("apiKey", "xxxxxxxxxxxxxxx");
			return headers;
		}

	};

AppController.getInstance()
	.addToRequestQueue(jsonObjReq, tag_json_obj);

处理 Volley 缓存

// 从缓存加载请求
Cache
	cache
	= AppController.getInstance()
		.getRequestQueue()
		.getCache();

Entry entry = cache.get(url);
if (entry != null) {
	try {
		String
			data
			= new String(entry.data, "UTF-8");
		// 处理数据,例如将其转换为 xml、json、位图等,
	}
	catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	}
}
}
else
{
	// 如果缓存的响应不存在
}

// 使缓存无效
AppController.getInstance()
	.getRequestQueue()
	.getCache()
	.invalidate(url, true);

// 关闭缓存字符串请求
StringRequest
	stringReq
	= new StringRequest(....);

// 禁用缓存
stringReq.setShouldCache(false);

// 删除特定缓存的缓存</strong>
AppController.getInstance()
	.getRequestQueue()
	.getCache()
	.remove(url);

// 删除所有缓存
AppController.getInstance()
	.getRequestQueue()
	.getCache()
	.clear(url);

取消请求

// 取消单个请求
String tag_json_arry = "json_req";

ApplicationController.getInstance()
	.getRequestQueue()
	.cancelAll("feed_request");

// 取消所有请求
ApplicationController.getInstance()
	.getRequestQueue()
	.cancelAll();

请求优先级

private Priority priority = Priority.HIGH;

StringRequest
	strReq
	= new StringRequest(
		Method.GET,
		Const.URL_STRING_REQ,
		new Response
			.Listener() {

					@Override
					public void onResponse(String response) {

						Log.d(TAG, response.toString());
						msgResponse.setText(response.toString());
						hideProgressDialog();

					} },
		new Response
			.ErrorListener() {

					@Override
					public void
					onErrorResponse(VolleyError error) {

						VolleyLog.d(TAG,
									"Error: "
										+ error.getMessage());
						hideProgressDialog();
					} }) {

		@Override
		public Priority getPriority()
		{
			return priority;
		}

	};
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:27:25  更:2022-09-13 11:28:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:39:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码