import java.io.UnsupportedEncodingException;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.HashMap;import java.util.Map;import org.json.JSONException;import org.json.JSONObject;import com.android.volley.AuthFailureError;import com.android.volley.NetworkResponse;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.Request.Method;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.HttpHeaderParser;import com.google.gson.FieldNamingPolicy;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.itboye.sunsun.utils.DataEncryptionUtil;import android.util.Log;/** * 建造者模式创建Request   * .默认请求 DEPRECATED_GET_OR_POST * @author Young * * @param <T> 请求结束后返回的对象,可以是 List<自定义类>  或  自定义类   */public class XJsonRequest<T> extends Request<T> {private Listener<T> listener;private Map<String,String>headers=new HashMap<String, String>();private  int method=Method.DEPRECATED_GET_OR_POST;private Map<String,String>params=new HashMap<String, String>();/** *  * @param url * @param listener * @param errlistener */public XJsonRequest(String url, XRequestListener<T> listener, ErrorListener errlistener) {super(Method.DEPRECATED_GET_OR_POST,url, errlistener);this.listener = listener;}public XJsonRequest(int method,String url, XRequestListener<T> listener, ErrorListener errlistener) {super(method, url, errlistener);this.listener = listener;}@Overrideprotected void deliverResponse(T response) {if (null != listener) {listener.onResponse(response);}}public XJsonRequest<T>addHeader(String k,String value){headers.put(k, value);return this;}@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {return  headers;}public XJsonRequest<T>setMethod(int method){this.method=method;return this;}@Overridepublic int getMethod() {return  method;}public XJsonRequest<T>addParam(String k,String value){params.put(k, value);return this;}@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return  params;}//该方法中gson解析可能需要调整@Overrideprotected Response<T> parseNetworkResponse(NetworkResponse response) {String parsed;try {parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));} catch (UnsupportedEncodingException e) {parsed = new String(response.data);}Log.v("rawResponse", parsed);if (listener != null) {Type typeClass1 = listener.getClass().getGenericSuperclass();if (typeClass1 instanceof ParameterizedType) {Type actualType1 = ((ParameterizedType) typeClass1).getActualTypeArguments()[0];System.out.println("type==="+actualType1);
//                              下面的解析过程仅供参考,具体解析方式由服务器返回的json决定。//Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();//T res = gson.fromJson(parsed, actualType1);JSONObject jsonObject;try {jsonObject = new JSONObject(parsed);String resultData = jsonObject.getString("data"); parsed = DataEncryptionUtil.decodeData(resultData); jsonObject = new JSONObject(parsed);int code = jsonObject.getInt("code");if (code!=0) {return null;} resultData = jsonObject.getString("data");T res = new Gson().fromJson(resultData, actualType1);if (null!=res) {return Response.success(res, HttpHeaderParser.parseCacheHeaders(response));}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return null;}}

.

 import com.android.volley.Response.Listener;/** *  * @author Young * * @param <T>请求结束后返回的对象,可以是 List<自定义类>  或  自定义类   */public abstract class XRequestListener<T> implements Listener<T> {}

使用:

String url = "http://。。。。。。";XJsonRequest<List<BikeBean>> request = new XJsonRequest<>(  url, new XRequestListener<List<BikeBean>>() {@Overridepublic void onResponse(List<BikeBean> response) {Log.v("result", response.toString());}}, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {Log.v("volleyerr", error.toString());}})  .setMethod(Method.GET) ;Volley.newRequestQueue(context).add(request);

百度api store获取天气信息
String httpUrl = "http://apis.baidu.com/apistore/weatherservice/citylist";String httpArg = "cityname=%E6%9C%9D%E9%98%B3";String url = httpUrl + "?" + httpArg;XJsonRequest<WeatherBean> request = new XJsonRequest<WeatherBean>( Method.GET,url, new XRequestListener<WeatherBean>() {@Overridepublic void onResponse(WeatherBean arg0) {Log.v("result", arg0.toString());}}, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {Log.v("volleyerr", "天气。。"+arg0.toString());}}).addHeader("apikey", "0ec4ef9237be00e62fcda68c1417a28e"); Volley.newRequestQueue(context).add(request);


更多相关文章

  1. android apk mHandler2
  2. Handler的理解
  3. Android传感器之磁场传感器
  4. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详
  5. 收藏-------Android应用程序组件Content Provider在应用程序之间
  6. Android插件化原理解析——Hook机制之动态代理
  7. Android(安卓)IOS WebRTC 音视频开发总结(十二)-- sufaceview
  8. (一)基于android平台的智能家居控制系统之 android客户端篇
  9. 《第一行代码--Android》读书笔记之数据存储

随机推荐

  1. 【Dialog】7种形式的Android(安卓)Dialog
  2. Android系统下如何通过外设实现GPIO中断
  3. Android随笔随想-GUI-事件分发先导篇
  4. 图书馆一游
  5. Android(安卓)init进程中鲜为人知的charg
  6. 探讨Android与iOS,我们将何去何从?
  7. Android(安卓)音视频录制概述
  8. Android(安卓)UI【Android(安卓)仿Iphone
  9. Android播放多张图片形成的一个动画示例
  10. Android(安卓)- 分享内容 - 接收其他APP