前言
Http网络数据交互请求是极其重要并且使用很频繁的一个模块,也是最基本的网络编程所需要学习的。网络请求方式的效率和性能直接影响到APP的整体用户体验流畅性,所以学习并掌握一款好的Http请求框架对我们的网络开发非常重要。Http请求在移动网络编程中主要是Get和Post请求接口数据的使用。所以,在学习好基础的Http请求知识后,为了提升开发效率,选择学习使用一款好的Http网络请求框架变得非常的重要。
> 什么是Volley?汉语译过来就是:齐射; 迸发的意思。可以看出来,Volley特别适合数据量不大但是通信频繁的场景。 > Volley是Google I/O 2013上Google官方发布的一款Android平台上的网络通信库。 > 以前的网络请求,要考虑开启线程、内存泄漏、性能等等复杂的问题。但是Volley框架已经帮我们把这些问题处理好了,对外提供了相应的完善的请求API ,我们只需要按照要求使用即可
1. Volley框架的特点
- 能使网络通信更快,更简单,更健壮
- Get、Post网络请求及网络图像的高效率异步处理请求
- 可以对网络请求进行排序优先级管理
- 网络请求的缓存
- 多级别取消请求
- 和Activity生命周期的联动(Activity结束时同时取消所有网络请求)
使用Volley可以简化一些网络通信的开发,当然Volley不适合大数据(largepayloads)和流媒体的网络请求。例如上百兆的文件、视频下载。 - Volley开源,可以进行定制修改也可以直接使用Jar包的形式。
2. Volley的用法
- Volley的Get和Post请求方式的使用
- Volley的网络请求队列建立和取消队列请求
Volley的Get和Post请求方式的使用
Get和Post用于与服务器间请求和发送数据。
建立请求首先建立队列,将请求添加到请求队列里。
然后进行相应的Get和Post请求,请求结果在回调里获取解析。
Volley的网络请求队列建立和取消队列请求
Volley有自己的请求队列管理机制,可以控制每个请求的建立与取消。非常方便和安全。
这样也就可以做到随时控制某个请求在什么时候结束,Activity生命周期关联,防止无谓的请求。
3. Volley的简单测试demo
1.新建一个MyApplication类,继承自Application ,用于返回一个全局的Volley网络请求队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package com.xkcoding.volley;
import android.app.Application;
import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley;
public class MyApplication extends Application { public static RequestQueue queue;
@Override public void onCreate() { super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); }
public static RequestQueue getRequestQueue() { return queue; }
}
|
2.在MainActivity中编写测试GET与POST请求的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| package com.xkcoding.volley;
import java.util.HashMap; import java.util.Map;
import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.widget.Toast;
import com.android.volley.Request.Method; import com.android.volley.AuthFailureError; import com.android.volley.Response; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest;
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); volley_Get(); volley_Post(); }
private void volley_Get() { String url = "http://apis.juhe.cn/mobile/get?phone=13429667914&key=ebe4429a46cb136bc7fcee57806fe952"; StringRequest request = new StringRequest(Method.GET, url, new Listener<String>() { @Override public void onResponse(String arg0) { Log.i("volley_Get", arg0); Toast.makeText(getApplicationContext(), arg0, Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Toast.makeText(getApplicationContext(), "网络请求失败", Toast.LENGTH_SHORT).show(); } }); request.setTag("testGet"); MyApplication.getRequestQueue().add(request); }
private void volley_Post() { String url = "http://apis.juhe.cn/mobile/get?"; StringRequest request = new StringRequest(Method.POST, url, new Listener<String>() { @Override public void onResponse(String arg0) { Log.i("volley_Post", arg0); Toast.makeText(getApplicationContext(), arg0, Toast.LENGTH_SHORT).show();
} }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Toast.makeText(getApplicationContext(), "网络请求失败", Toast.LENGTH_SHORT).show(); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { HashMap<String, String> map = new HashMap<String, String>(); map.put("phone", "13429667914"); map.put("key", "ebe4429a46cb136bc7fcee57806fe952"); return map; } }; request.setTag("testPost"); MyApplication.getRequestQueue().add(request); }
@Override protected void onStop() { MyApplication.getRequestQueue().cancelAll("testGet"); MyApplication.getRequestQueue().cancelAll("testPost"); super.onStop(); }
}
|
3.在清单文件AndroidManifest.xml中注册刚刚的MyApplication并添加网络权限
1
| <uses-permission android:name="android.permission.INTERNET"/>
|
4.Ctrl+F11 成功在LogCat中打印出号码信息