Skip to content
CodingDiary
返回

volley开源框架的初体验

编辑页面
导读

前言Http网络数据交互请求是极其重要并且使用很频繁的一个模块,也是最基本的网络编程所需要学习的。网络请求方式的效率和性能直接影响到APP的整体用户体验流畅性,所以学习并掌握一款好的Http请求框架对我们的网络开发非常重要。Http请求在移动网络编程中主要是Get和Post请求接口数据的使用。所以,在学习好基础的Http请求知识后,为了提升开发效率,选择学习使用一款好的Http网络请求框架变得非常...

前言

Http网络数据交互请求是极其重要并且使用很频繁的一个模块,也是最基本的网络编程所需要学习的。网络请求方式的效率和性能直接影响到APP的整体用户体验流畅性,所以学习并掌握一款好的Http请求框架对我们的网络开发非常重要。Http请求在移动网络编程中主要是Get和Post请求接口数据的使用。所以,在学习好基础的Http请求知识后,为了提升开发效率,选择学习使用一款好的Http网络请求框架变得非常的重要。 > 什么是Volley?汉语译过来就是:齐射; 迸发的意思。可以看出来,Volley特别适合数据量不大但是通信频繁的场景。 > Volley是Google I/O 2013上Google官方发布的一款Android平台上的网络通信库。 > 以前的网络请求,要考虑开启线程、内存泄漏、性能等等复杂的问题。但是Volley框架已经帮我们把这些问题处理好了,对外提供了相应的完善的请求API ,我们只需要按照要求使用即可

1. Volley框架的特点

2. Volley的用法

  1. Volley的Get和Post请求方式的使用
  2. Volley的网络请求队列建立和取消队列请求
  1. Volley的Get和Post请求方式的使用 Get和Post用于与服务器间请求和发送数据。 建立请求首先建立队列,将请求添加到请求队列里。 然后进行相应的Get和Post请求,请求结果在回调里获取解析。

  2. Volley的网络请求队列建立和取消队列请求 Volley有自己的请求队列管理机制,可以控制每个请求的建立与取消。非常方便和安全。 这样也就可以做到随时控制某个请求在什么时候结束,Activity生命周期关联,防止无谓的请求。

3. Volley的简单测试demo

1.新建一个MyApplication类,继承自Application ,用于返回一个全局的Volley网络请求队列

package com.xkcoding.volley;

import android.app.Application;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

/**
 * @ClassName: MyApplication
 * @Description: 用于生成一个全局的请求队列
 * @author Yangkai.Shen
 * @date 2016-3-26 上午1:09:10
 *
 */
public class MyApplication extends Application {
	public static RequestQueue queue;

	@Override
	public void onCreate() {
		super.onCreate();
		queue = Volley.newRequestQueue(getApplicationContext());
	}

	/**
	 * @Title: getRequestQueue
	 * @Description: 获取一个全局的请求队列
	 * @param @return 参数说明
	 * @return RequestQueue 返回类型
	 * @throws
	 */
	public static RequestQueue getRequestQueue() {
		return queue;
	}

}

2.在MainActivity中编写测试GET与POST请求的代码

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;

/**
 * @ClassName: MainActivity
 * @Description: 1. Volley的Get和Post请求方式的使用 2. Volley的网络请求队列建立和取消队列请求
 * @author Yangkai.Shen
 * @date 2016-3-26 上午1:08:27
 *
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		volley_Get();
		volley_Post();
	}

	/**
	 * @Title: volley_Get
	 * @Description: 测试GET方法
	 * @param 参数说明
	 * @return void 返回类型
	 * @throws
	 */
	private void volley_Get() {
		//测试url为聚合数据的手机归属地查询
		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();
					}
				});
		// 加标签,便于在Activity销毁时,断开网络请求
		request.setTag("testGet");
		// 将请求放入请求队列
		MyApplication.getRequestQueue().add(request);
	}

	private void volley_Post() {
		//测试url为聚合数据的手机归属地查询
		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();
					}
				}) {
			// POST请求所附带的请求参数
			@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;
			}
		};
		// 加标签,便于在Activity销毁时,断开网络请求
		request.setTag("testPost");
		// 将请求放入请求队列
		MyApplication.getRequestQueue().add(request);
	}

	@Override
	protected void onStop() {
		// Activity销毁时取消请求队列列的所有请求,通过Tags找到所有请求
		MyApplication.getRequestQueue().cancelAll("testGet");
		MyApplication.getRequestQueue().cancelAll("testPost");
		super.onStop();
	}

}

3.在清单文件AndroidManifest.xml中注册刚刚的MyApplication并添加网络权限

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

4.Ctrl+F11 成功在LogCat中打印出号码信息 LogCat信息


编辑页面
分享到:

上一篇
android 在eclipse中把局部变量变成成员变量前自动加m
下一篇
Android 开源项目分类汇总