配置
compile files('libs/Volley.jar')
用来管理全局的请求
public class MyApplication extends Application { public static RequestQueue queue; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); } public static RequestQueue getHttpQueue() { return queue; } }
MainActivity
Get和Post用于与服务器间请求和发送数据。
建立请求首先建立队列,将请求添加到请求队列里。
然后进行相应的Get和Post请求,请求结果在回调里获取解析。
Volley有自己的请求队列管理机制,可以控制每个请求的建立与取消。非常方便和安全。
这样也就可以做到随时控制某个请求在什么时候结束,Activity生命周期关联,防止无谓的请求。
/** * 1、Volley的Get和Post请求方式的使用 * * 2、Volley的网络请求队列建立和取消队列请求及Activity周期关联 */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // volley_Get(); volley_Post(); } @Override protected void onStop() { super.onStop(); MyApplication.getHttpQueue().cancelAll("abcPost"); MyApplication.getHttpQueue().cancelAll("abcGet"); } 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) { Toast.makeText(MainActivity.this, arg0, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Toast.makeText(MainActivity.this, "网络请求失败", Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { HashMap<String, String> map = new HashMap<String, String>(); map.put("phone", "13666666666"); map.put("key", "335adcc4e891ba4e4be6d7534fd54c5d"); return map; } }; request.setTag("abcPost"); MyApplication.getHttpQueue().add(request); } private void volley_Get() { String url = "http://apis.juhe.cn/mobile/get?phone=13666666666&key=335adcc4e891ba4e4be6d7534fd54c5d"; StringRequest request = new StringRequest(Method.GET, url, new Listener<String>() { @Override public void onResponse(String arg0) { Toast.makeText(MainActivity.this, arg0, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Toast.makeText(MainActivity.this, "网络请求失败", Toast.LENGTH_LONG).show(); } }); request.setTag("abcGet"); MyApplication.getHttpQueue().add(request); } }
能使网络通信更快,更简单,更健壮
Get、Post网络请求及网络图像的高效率异步处理请求
可以对网络请求进行排序优先级管理
网络请求的缓存
多级别取消请求
和Activity生命周期的联动(Activity结束时同时取消所有网络请求)
使用Volley可以简化一些网络通信的开发,当然Volley不适合大数据(large payloads )和流媒体的网络请求。例如上百兆的文件、视频下载。
Volley开源,可以进行定制修改也可以直接使用Jar包的形式。