android Volley自定义request的方法

android推出新的网络访问框架volley,volley在多次少量的网络请求中,效率很高,对于json也有很好的支持。

如果想对于volley做一个全面的认识,请转到下面的链接:

http://blog.csdn.net/t12x3456/article/details/9221611

对于一个简单的volley请求,内容如下。

mQueue = Volley.newRequestQueue(getApplicationContext());
mQueue.add(new JsonObjectRequest(Method.GET, url, null,
            new Listener() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, "response : " + response.toString());
                }
            }, null));
mQueue.start();

对于上面的请求中,使用了JsonObjectRequest这个类。

根据开发的需要,我们可能需要自己的Request类,实现自己的一些方法。

volley就网络请求提供了 Request<T>这个基类,我们实现自己的Request,继承这个基类即可,下面给出一个自定义基类:

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
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.longchengbianli.android.BuildConfig;

public abstract class BaseRequest<T> extends Request<T> {

	private final Listener<T> mListener;
        //mListener是volley网络请求成功后回调的方法。errListener则是失败时的回调。

	public BaseRequest(int method, String url, Listener<T> listener,
			ErrorListener errListener) {
		super(method, url, errListener);
		mListener = listener;

		setShouldCache(false);
	}
	@Override
	protected Response<T> parseNetworkResponse(NetworkResponse response) {
		try {
			String jsonString = new String(response.data,
					HttpHeaderParser.parseCharset(response.headers));
			T result = parseNetworkResponseDelegate(jsonString);//这里用了一个泛型的技巧,T由后面的实现确定
			mListener.onResponse(result);//成功时的回调方法
			return Response.success(result,
					HttpHeaderParser.parseCacheHeaders(response));
		} catch (UnsupportedEncodingException e) {
			return Response.error(new ParseError(e));
		}
	}
//parseNetworkResponseDelegate解析json的接口,由子类实现
protected abstract T parseNetworkResponseDelegate(String jsonString);


上面的基类实现,很好的预留出了json解析的接口parseNetworkResponseDelegate。

同时,基类中可以看到对于网络请求结果的不同回调方法listenner和errlistener。

使用的时候,只要实现对应的接口,即可按照自己的需求定制不同的网络请求。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值