您的位置:首页 > 理论基础 > 计算机网络

com.android.volley 里面网络请求的使用

2016-03-14 19:12 716 查看

1.建立请求管理类

public class RequestManager {

public static final int OUT_TIME = 10000;
public static final int TIMES_OF_RETRY = 1;
public static RequestQueue mRequeue = Volley.newRequestQueue(APP.getmContext());

public static void addRequest(Request<?> request,Object tag){
if(tag!=null){
request.setTag(tag);
}
//给每个请求重设超时、重试次数
request.setRetryPolicy(new DefaultRetryPolicy(
OUT_TIME,TIMES_OF_RETRY,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
));
mRequeue.add(request);
}

public static void canceAll(Object tag) {

mRequeue.cancelAll(tag);
}

2  编写你要的网络请求

public class Request4FreshNew extends Request<ArrayList<FreshNews>> {

private Response.Listener<ArrayList<FreshNews>> listener;

public Request4FreshNew(String url, Response.Listener<ArrayList<FreshNews>> listener,
Response.ErrorListener errorListener) {
super(Method.GET,url,errorListener);
this.listener=listener;
}

@Override
protected Response<ArrayList<FreshNews>> parseNetworkResponse(NetworkResponse networkResponse) {
Log.d("AAA","networkResponse");
// networkResponse 是网络请求返回的数据 通过解析返回到 deliverResponse(ArrayList<FreshNews> freshNewses) 中
try {
String resultStr = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers));
Log.d("AAA","networkResponse="+networkResponse);
Log.d("AAA","resultStr="+resultStr);
JSONObject resultObj = new JSONObject(resultStr);
JSONArray postsArray = resultObj.optJSONArray("posts");
return Response.success(FreshNews.parse(postsArray), HttpHeaderParser.parseCacheHeaders(networkResponse));
} catch (Exception e) {
e.printStackTrace();
return Response.error(new ParseError(e));
}
}

@Override
protected void deliverResponse(ArrayList<FreshNews> freshNewses) {
Log.d("AAA","deliverResponse");
//将数据回调出去
listener.onResponse(freshNewses);
}
}

3最后通过 RequestManager 将请求添加到请求队列里面去(RequestQueue)

RequestManager.addRequest(new Request4FreshNew(FreshNews.getUrlFreshNews(page),
new Response.Listener<ArrayList<FreshNews>>() {
@Override
public void onResponse(ArrayList<FreshNews> freshNewses) {
Log.d("AAA","onResponse");
mLoadResultCallBack.onSuccess(LoadResultCallBack.SUCCESS_OK, null);
mLoadFinisCallBack.loadFinish(null);
if(page==1){
FreshNewsCache.getInstance(mActivity).clearAllCache();

}
mFreshNews.addAll(freshNewses);
notifyDataSetChanged();
//缓存起来
FreshNewsCache.getInstance(mActivity).addResultCache(JSONParser.toString(freshNewses),page);

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mLoadResultCallBack.onError(LoadResultCallBack.ERROR_NET, volleyError.getMessage());
mLoadFinisCallBack.loadFinish(null);
Log.d("AAA","onErrorResponse");

}
} ),mActivity);

}else {

mLoadResultCallBack.onSuccess(LoadResultCallBack.SUCCESS_OK, null);
mLoadFinisCallBack.loadFinish(null);
if (page == 1) {
mFreshNews.clear();
// ShowToast.Short(ConstantString.LOAD_NO_NETWORK);
}

mFreshNews.addAll(FreshNewsCache.getInstance(mActivity).getCacheByPage(page));
notifyDataSetChanged();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android net