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(); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories