网络请求之Volley的使用

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

首先,为了后面进行缓存处理,需要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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值