android推出新的网络访问框架volley,volley在多次少量的网络请求中,效率很高,对于json也有很好的支持。
如果想对于volley做一个全面的认识,请转到下面的链接:
http://blog.youkuaiyun.com/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。
使用的时候,只要实现对应的接口,即可按照自己的需求定制不同的网络请求。