感覺老師這個二次封裝有些復雜,下面是我做的簡化版本。
public?abstract?class?VolleyListener?{
????public?abstract?void?onSuccess(String?result);
????public?abstract??void?onError(VolleyError?error);
????public?Response.Listener<String>?loadingListener(){
????????Response.Listener<String>?listener?=?new?Response.Listener<String>()?{
????????????@Override
????????????public?void?onResponse(String?response)?{
????????????????onSuccess(response);
????????????}
????????};
????????return?listener;
????}
????public?Response.ErrorListener?getErrorListener(){
????????Response.ErrorListener?errorListener?=?new?Response.ErrorListener(){
????????????@Override
????????????public?void?onErrorResponse(VolleyError?error)?{
????????????????onError(error);
????????????}
????????};
????????return?errorListener;
????}
}Request封裝
public?class?VolleyRequest?{
????private?static?StringRequest?stringRequest;
????//有全局RequestQueue的GET請求
????public?static?void?requestGlobalGET(String?url,String?tag,VolleyListener?listener){
????????BaseApplication.getRequestQueue().cancelAll(tag);
????????stringRequest?=?new?StringRequest(Request.Method.GET,url,listener.loadingListener(),listener.getErrorListener());
????????stringRequest.setTag(tag);
????????BaseApplication.getRequestQueue().add(stringRequest);
????}
????//有全局RequestQueue的POST請求
????public?static?void?requestGlobalPOST(String?url,String?tag,VolleyListener?listener){
????????BaseApplication.getRequestQueue().cancelAll(tag);
????????stringRequest?=?new?StringRequest(Request.Method.POST,url,listener.loadingListener(),listener.getErrorListener());
????????stringRequest.setTag(tag);
????????BaseApplication.getRequestQueue().add(stringRequest);
????}
????//無全局RequestQueue的GET請求
????public?static?void?requestGET(Context?context,String?url,String?tag,VolleyListener?listener){
????????RequestQueue?queue?=?Volley.newRequestQueue(context);
????????stringRequest?=?new?StringRequest(Request.Method.GET,url,listener.loadingListener(),listener.getErrorListener());
????????stringRequest.setTag(tag);
????????queue.add(stringRequest);
????}
????//無全局RequestQueue的GET請求
????public?static?void?requestPOST(Context?context,String?url,String?tag,VolleyListener?listener){
????????RequestQueue?queue?=?Volley.newRequestQueue(context);
????????stringRequest?=?new?StringRequest(Request.Method.POST,url,listener.loadingListener(),listener.getErrorListener());
????????stringRequest.setTag(tag);
????????queue.add(stringRequest);
????}
}調用
//有全局requestqueue無需加this,否則要加上下文
VolleyRequest.requestGET(this,"http://www.baidu.com","get",new?VolleyListener()?{
????@Override
????public?void?onSuccess(String?result)?{
????????Log.i("TAG",?result);
????}
????@Override
????public?void?onError(VolleyError?error)?{
????????Log.i("TAG",?error.getMessage());
????}
});