WordPress網站放ICP,动漫网页制作,wordpress字典,云网站开发本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库#xff0c;后者是 Android 自带 API。企业级应用#xff0…本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库后者是 Android 自带 API。企业级应用一般都会选择使用已经封装好的 http 框架。比较流行有 Volley、android-async-http、retrofit、okhttp、androidquery、AndroidAsync 等。他们各有特点不同的框架有不同的效率如今 Google 推出了官方的针对 Android 平台上的网络通信库 Volley能使网络通信更快更简单更健壮Volley 在提供了高性能网络通讯功能的同时对网络图片加载也提供了良好的支持完全可以满足简单 REST 客户端的需求。另外但 Volley 扩展性很强可以根据需要定制你自己的网络请求。 什么是 Volley 库 Volley 是 Ficus Kirpatrick 在 Gooogle I/O 2013 发布的一个处理和缓存网络请求的库能使网络通信更快更简单更健壮。Volley 名称的由来 a burst or emission of many things or a large amount at once。在Gooogle I/O 2013 演讲上其配图是一幅火弓箭。如图 1 所示。 图 1 Gooogle I/O 2013 Volley Volley 管理着处理和缓存网络请求它节省了开发者的宝贵时间一次又一次编写相同的网络调用/缓存代码。更少的重复代码其中一个好处就是减少了 bug这是所有开发者所期望的。 所谓“一次又一次编写相同的网络调用/缓存代码”就是 AsyncTask 以及你编写的通过 Web API 获取响应并显示出来的逻辑/代码。我们必须在 ProgressBar() 和 onPostExecute() 方法内照顾 ProgressBar/ProgressDialog 。虽然这不是一个艰巨的任务但却很无聊甚至感到厌倦尽管我已经定义了 BaseTask 类来管理ProgressBar/ProgressDialog 的显示/取消以及更多其它操作。现在Volley 是替代 AsyncTask 的强大工具。 Volley 能做什么 Volley 适合小而快的数据传输特别是针对以下两种情况 JSON 对象 图片加载 Volley 优势 Volley 可以自动安排所有的网络请求。这意味着 Volley 会照顾你 APP 执行的从 Web 获取响应或图片所有的网络请求。 Volley 提供透明的磁盘和内存缓存。 Volley 提供强大的取消请求的 API。这意味着你可以取消一个单独的请求或是你可以设置取消请求的块可以为多个或范围。 Volley 提供强大的自定功能。 Volley 提供调试和追踪工具。 Volley 架构 Volley 使用了线程池来作为基础结构主要分为主线程cache 线程和 network 线程。主线程和 cache 线程都只有一个而 NetworkDispatcher 线程可以有多个这样能解决比并行问题。 图 2 Volley 架构 环境 Windows 2008 R2 64 位Eclipse ADT V22.6.2Android 4.4.3三星 SM-G3508Android OS 4.1 演示 Volley 库通过网络获取 JSON 数据 下载 Demo将 Volley 库和演示项目导入到 eclipse 里再将 Volley 库添加到演示项目。程序运行结果如图 3 所示 图 3 演示 Volley 库通过网络获取 JSON 数据 通过 Volley 访问国家气象局提供的 JSON 接口获得北京的天气状况。 http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.html 其中101010100 代表北京。 授权 Android 访问网络权限 修改 AndroidManifest.xml 文件添加授权 Android 访问网络的权限。 uses-permission android:nameandroid.permission.INTERNET / activity_main.xml 文件只是一个 TextView 控件一个 ProgreeBar 控件略核心代码如下所示 package com.example.volleybasicexample; import org.json.JSONObject; 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.JsonObjectRequest;import com.android.volley.toolbox.Volley; import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView; public class MainActivity extends Activity { private TextView txtDisplay; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtDisplay (TextView) findViewById(R.id.txtDisplay); RequestQueue queue Volley.newRequestQueue(this); String url http://www.weather.com.cn/data/sk/101010100.html; JsonObjectRequest jsObjRequest new JsonObjectRequest( Request.Method.GET, url, null, new Response.ListenerJSONObject() { Override public void onResponse(JSONObject response) { // TODO Auto-generated method stub txtDisplay.setText(Response response.toString()); findViewById(R.id.progressBar1) .setVisibility(View.GONE); } }, new Response.ErrorListener() { Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } }); queue.add(jsObjRequest); }} 有些时候请求也可以用 StringRequest如下代码所示效果是一样的 StringRequest stringRequest new StringRequest(Request.Method.GET, url, new Response.ListenerString() { Override public void onResponse(String response) { // TODO Auto-generated method stub txtDisplay.setText(Response response.toString()); findViewById(R.id.progressBar1) .setVisibility(View.GONE); } }, new Response.ErrorListener() { Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } }); 参考资料 Android Async HTTP Clients: Volley vs Retrofit Android Volley Android Volley Examples 下载 Demo转载于:https://www.cnblogs.com/liuning8023/p/3806832.html