关闭

网络请求之Volley的使用

标签: Volley 网络请求
91人阅读 评论(0) 收藏 举报
分类:

由于只是为了快速出效果,这里只是做了简单的网络请求封装

首先,为了后面进行缓存处理,需要Volley的缓存线程,所以这里采用了JsonRequst作为基类对象

package net;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import com.android.volley.AuthFailureError;
import com.android.volley.Cache;
import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonRequest;
import com.google.gson.Gson;

public class Protocol<T> extends JsonRequest<T> {
	private Class<T> mClass;
	private Gson mGson;
	private Map<String, String> mHeaders;

	public Protocol(Class<T> mClass, String url, Listener<T> listener, ErrorListener errorListener,
			Map<String, String> headers) {
		super(Method.GET, url, null, listener, errorListener);
		this.mClass = mClass;
		this.mHeaders = headers;
		mGson = new Gson();
	}

	/**
	 * 添加请求头
	 */

	@Override
	public Map<String, String> getHeaders() throws AuthFailureError {
		Map<String, String> headers = new HashMap<>();
		if (mHeaders != null) {
			for (Entry<String, String> en : mHeaders.entrySet()) {
				String key = en.getKey();
				String value = en.getValue();
				headers.put(key, value);
			}
		}

		return headers;
	}

	@Override
	protected Response parseNetworkResponse(NetworkResponse response) {
		// 解析网络请求成功时的数据
		try {
			String json = new String(response.data, PROTOCOL_CHARSET); //PROTOCOL_CHARSET Volley中Request默认的UTF-8编码格式
			// 解析成javabean
			T dataBean = mGson.fromJson(json, mClass);
			// 从响应头中解析获得缓存线程
			Cache.Entry cEntry = HttpHeaderParser.parseCacheHeaders(response);
			//通过success方法获得数据,如果缓存线程有数据,直接先从缓存中获取
			return Response.success(dataBean, cEntry);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return null;
	}
}
为了防止多次创建请求队列,创建一个管理类,用于管理请求,程序启动创建请求队列,后面发送请求只需添加进去即可,不用再次创建请求队列

package manager;

import android.app.Application;

public class PrjAplication extends Application{
	@Override
	public void onCreate() {
		super.onCreate();
		// 程序启动时,创建NetWorkManager实例,以便创建请求队列
		NetWorkManager.init(getApplicationContext());
	}
}
注意,这里需要清单文件做一些配置

 <application
        android:name="manager.PrjAplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
package manager;

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

import android.content.Context;

/**
 * 网络请求的管理
 * @author Administrator
 *
 */

public class NetWorkManager {

	private static Context context;
	private static RequestQueue requestQueue;

	public static void init(Context applicationContext) {
		context = applicationContext;
		//程序启动时,创建请求队列
		requestQueue = Volley.newRequestQueue(context);
	}
	
	/**
	 * 添加发送请求
	 * @param request
	 */
	public static void sendRequest(JsonRequest request){
		requestQueue.add(request);
	}
	
	public static Context getContext(){
		return context;
	}
	
}
最后,在需要发送请求的类中实现请求

private void loadData() {

		String url = "http://apis.baidu.com/txapi/huabian/newtop?num=10&page=" + mPageIndex;
		Map<String, String> headers = new HashMap<>();
		headers.put("apikey", "a4596ace542f168b5f1c080b5b80d898");
		// 创建请求队列
		// 创建请求
		Protocol<NewsBean> request = new Protocol<NewsBean>(NewsBean.class, url, listener, errorListener, headers);
		// 添加发送请求
		NetWorkManager.sendRequest(request);
	}

	private Listener<NewsBean> listener = new Listener<NewsBean>() {

		@Override
		public void onResponse(NewsBean response) {
			mList = response.newslist;
			mAdapter = new EveryDayAdapter(MainActivity.this, mList);
			// 3.加载数据到每个Item视图中,通过容器进行添加
			loadOutView();
		}
	};
	private ErrorListener errorListener = new ErrorListener() {

		@Override
		public void onErrorResponse(VolleyError error) {
			// TODO Auto-generated method stub

		}
	};

以上只是简单的写下Volley使用,后面关于请求参数的封装及POST请求,后面可能会继续添加




1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Volley高并发处理网络请求(No2)

这是我觉得比较好的第二遍,讲的详细到位,转载过来供大家学习参考 No 002:转载于点击打开链接 下面贴介绍和源码: .Volley简介 volley的英文意思为‘群发’、‘迸发’。Volley...
  • Demo006
  • Demo006
  • 2016-04-27 22:47
  • 1104

volley3 网络请求的取消

网络请求的取消
  • zrjliming
  • zrjliming
  • 2016-08-26 09:21
  • 2747

Volley框架--网络请求(GET和POST请求的使用)

在Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。 在我们平常的开发中,我们经常需要使用到网络请求,这时候我们就...
  • u013043346
  • u013043346
  • 2015-12-01 14:02
  • 7776

使用google的开源框架Volley,功能一:网络请求Json数据

1.首先到我的百度云http://pan.baidu.com/s/1skZyUeD ,下载volley.jar,放到你的项目lib目录下 2.然后开始写代码 package com.example...
  • ouhz_rM
  • ouhz_rM
  • 2016-05-11 16:13
  • 252

Android中使用Volley框架进行网络请求

Volley框架进行网络请求,简单的请求方法,还望各位大神多多指教】 实现方法:需要一个第三方jar包package com.example.volleyhttp;import java.util....
  • qq_33996621
  • qq_33996621
  • 2016-05-24 16:55
  • 214

Android中使用Volley开源库进行Http网络请求(GET方式)

在之前的Http网络请求中,我们一般使用输入流以及缓冲区的方式进行访问,然后从服务器获取返回的数据。代码行数近20行,而且网络操作是放在Thread线程中进行的,对于Java或者Android的线程还...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2015-07-14 23:04
  • 1788

Android网络请求开源框架Volley快速使用指南(2)——异步获取图片

直接上源码: /** * 利用Volley异步加载图片 * * 注意方法参数: * getImage(Context context,String im...
  • u012027644
  • u012027644
  • 2015-05-15 09:26
  • 754

Android网络请求框架:Volley简单使用

Volley框架:2013年Google I/O大会上,Volley发布了。Volley是Google官方发岸上的用与Android平 台上的网络通信库,目的是使网络通信更快,更简单,更健壮。 ...
  • true100
  • true100
  • 2016-01-11 10:51
  • 1044

网络请求开源库volley和AsyncHttp的使用

今天了解两个用于网络数据请求的开源库,第一个是volley这个的主要特征就是能够和activity生命周期相结合,当activity不在栈顶的时候线程也会自动断掉,缺点就是不适合大型文件的上传和下载,...
  • xingshang_love
  • xingshang_love
  • 2015-07-30 12:02
  • 331

Android开发笔记-使用Volley开源库进行Http网络请求(POST方式)

之前使用了开源网络请求库Volley进行了Http GET请求。这次我们讨论使用Volley进行POST请求。POST请求比GET稍微复杂一点点。可以认为是建立在GET的基础上。POST使发送的url...
  • errvv
  • errvv
  • 2016-01-29 10:01
  • 217
    个人资料
    • 访问:6527次
    • 积分:266
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章分类