android Volley框架 http请求
2015-08-31 14:53
561 查看
package com.megenius.api;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import android.os.SystemClock;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Request.Method;
import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.RequestFuture;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.megenius.BaseApplication;
import com.megenius.utils.JLog;
public class HttpClient
{
private static final int DEFAULT_TIMEOUT = 45 * 1000;
private static final TimeUnit DEFAULT_TIMEUNIT = TimeUnit.MILLISECONDS;
private static RequestQueue requestQueue;
private static HttpClient httpClient;
public static HttpClient getInstance()
{
if (null == httpClient)
{
synchronized (HttpClient.class)
{
if (null == httpClient)
{
httpClient = new HttpClient();
requestQueue = Volley.newRequestQueue(BaseApplication.getInstance());
requestQueue.start();
}
}
}
return httpClient;
}
public String execHttpPost(String url, final Map<String, String> params) throws InterruptedException,
ExecutionException, TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
JLog.i("http params:" + params.toString());
RequestFuture<String> requestFuture = RequestFuture.newFuture();
Request<?> request = new StringRequest(Method.POST, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http post spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public String execHttpGet(String url, final Map<String, String> params) throws InterruptedException, ExecutionException,
TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
RequestFuture<String> requestFuture = RequestFuture.newFuture();
Request<?> request = new StringRequest(Method.GET, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http get spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public String execHttpPut(String url, final Map<String, String> params) throws InterruptedException, ExecutionException,
TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
JLog.i("http params:" + params.toString());
RequestFuture<String> requestFuture = RequestFuture.newFuture();
final Request<?> request = new StringRequest(Method.PUT, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http put spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public String execHttpDelete(String url, final Map<String, String> params) throws InterruptedException,
ExecutionException, TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
RequestFuture<String> requestFuture = RequestFuture.newFuture();
Request<?> request = new StringRequest(Method.DELETE, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http get spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public void execHttpPost(String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener)
{
url = getUrlWithParams(url, params);
Request<?> request = new StringRequest(Method.POST, url, listener, errorListener);
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, MyRetryPolicy.DEFAULT_MAX_RETRIES,
MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(request);
}
public void execHttpGet(String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener)
{
url = getUrlWithParams(url, params);
Request<?> request = new StringRequest(Method.GET, url, listener, errorListener);
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, MyRetryPolicy.DEFAULT_MAX_RETRIES,
MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(request);
}
public void execHttpPut(String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener)
{
url = getUrlWithParams(url, params);
Request<?> request = new StringRequest(Method.PUT, url, listener, errorListener);
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, MyRetryPolicy.DEFAULT_MAX_RETRIES,
MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(request);
}
/**
* get complete url
*
* @param shouldEncodeUrl
* @param url
* @param params
* @return
*/
public String getUrlWithParams(String url, Map<String, String> requestParams)
{
if (null != requestParams)
{
for (Entry<String, String> entry : requestParams.entrySet())
{
if (!url.contains("?"))
{
url += "?" + entry.getKey() + "=" + entry.getValue();
} else
{
url += "&" + entry.getKey() + "=" + entry.getValue();
}
}
}
url = url.replace(" ", "%20");
return url;
}
class MyRetryPolicy implements RetryPolicy
{
/** The current timeout in milliseconds. */
private int mCurrentTimeoutMs;
/** The current retry count. */
private int mCurrentRetryCount;
/** The maximum number of attempts. */
private final int mMaxNumRetries;
/** The backoff multiplier for for the policy. */
private final float mBackoffMultiplier;
/** The default socket timeout in milliseconds */
public static final int DEFAULT_TIMEOUT_MS = 2500;
/** The default number of retries */
public static final int DEFAULT_MAX_RETRIES = 1;
/** The default backoff multiplier */
public static final float DEFAULT_BACKOFF_MULT = 1f;
/**
* Constructs a new retry policy using the default timeouts.
*/
public MyRetryPolicy()
{
this(DEFAULT_TIMEOUT_MS, DEFAULT_MAX_RETRIES, DEFAULT_BACKOFF_MULT);
}
/**
* Constructs a new retry policy.
*
* @param initialTimeoutMs
* The initial timeout for the policy.
* @param maxNumRetries
* The maximum number of retries.
* @param backoffMultiplier
* Backoff multiplier for the policy.
*/
public MyRetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier)
{
mCurrentTimeoutMs = initialTimeoutMs;
mMaxNumRetries = maxNumRetries;
mBackoffMultiplier = backoffMultiplier;
}
/**
* Returns the current timeout.
*/
@Override
public int getCurrentTimeout()
{
return mCurrentTimeoutMs;
}
/**
* Returns the current retry count.
*/
@Override
public int getCurrentRetryCount()
{
return mCurrentRetryCount;
}
/**
* Prepares for the next retry by applying a backoff to the timeout.
*
* @param error
* The error code of the last attempt.
*/
@Override
public void retry(VolleyError error) throws VolleyError
{
mCurrentRetryCount++;
mCurrentTimeoutMs += (mCurrentTimeoutMs * mBackoffMultiplier);
if (!hasAttemptRemaining())
{
throw error;
} else
{
try
{
Thread.sleep(800);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
/**
* Returns true if this policy has attempts remaining, false otherwise.
*/
protected boolean hasAttemptRemaining()
{
return mCurrentRetryCount <= mMaxNumRetries;
}
}
}
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import android.os.SystemClock;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Request.Method;
import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.RequestFuture;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.megenius.BaseApplication;
import com.megenius.utils.JLog;
public class HttpClient
{
private static final int DEFAULT_TIMEOUT = 45 * 1000;
private static final TimeUnit DEFAULT_TIMEUNIT = TimeUnit.MILLISECONDS;
private static RequestQueue requestQueue;
private static HttpClient httpClient;
public static HttpClient getInstance()
{
if (null == httpClient)
{
synchronized (HttpClient.class)
{
if (null == httpClient)
{
httpClient = new HttpClient();
requestQueue = Volley.newRequestQueue(BaseApplication.getInstance());
requestQueue.start();
}
}
}
return httpClient;
}
public String execHttpPost(String url, final Map<String, String> params) throws InterruptedException,
ExecutionException, TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
JLog.i("http params:" + params.toString());
RequestFuture<String> requestFuture = RequestFuture.newFuture();
Request<?> request = new StringRequest(Method.POST, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http post spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public String execHttpGet(String url, final Map<String, String> params) throws InterruptedException, ExecutionException,
TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
RequestFuture<String> requestFuture = RequestFuture.newFuture();
Request<?> request = new StringRequest(Method.GET, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http get spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public String execHttpPut(String url, final Map<String, String> params) throws InterruptedException, ExecutionException,
TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
JLog.i("http params:" + params.toString());
RequestFuture<String> requestFuture = RequestFuture.newFuture();
final Request<?> request = new StringRequest(Method.PUT, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http put spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public String execHttpDelete(String url, final Map<String, String> params) throws InterruptedException,
ExecutionException, TimeoutException
{
long time = SystemClock.uptimeMillis();
JLog.i("http url:" + url);
RequestFuture<String> requestFuture = RequestFuture.newFuture();
Request<?> request = new StringRequest(Method.DELETE, url, requestFuture, requestFuture)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, 2, MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestFuture.setRequest(request);
requestQueue.add(request);
String result = requestFuture.get(DEFAULT_TIMEOUT, DEFAULT_TIMEUNIT);
JLog.i("http result:" + result);
JLog.i("http get spend time:" + (SystemClock.uptimeMillis() - time));
return result;
}
public void execHttpPost(String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener)
{
url = getUrlWithParams(url, params);
Request<?> request = new StringRequest(Method.POST, url, listener, errorListener);
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, MyRetryPolicy.DEFAULT_MAX_RETRIES,
MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(request);
}
public void execHttpGet(String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener)
{
url = getUrlWithParams(url, params);
Request<?> request = new StringRequest(Method.GET, url, listener, errorListener);
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, MyRetryPolicy.DEFAULT_MAX_RETRIES,
MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(request);
}
public void execHttpPut(String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener)
{
url = getUrlWithParams(url, params);
Request<?> request = new StringRequest(Method.PUT, url, listener, errorListener);
request.setRetryPolicy(new MyRetryPolicy(DEFAULT_TIMEOUT, MyRetryPolicy.DEFAULT_MAX_RETRIES,
MyRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(request);
}
/**
* get complete url
*
* @param shouldEncodeUrl
* @param url
* @param params
* @return
*/
public String getUrlWithParams(String url, Map<String, String> requestParams)
{
if (null != requestParams)
{
for (Entry<String, String> entry : requestParams.entrySet())
{
if (!url.contains("?"))
{
url += "?" + entry.getKey() + "=" + entry.getValue();
} else
{
url += "&" + entry.getKey() + "=" + entry.getValue();
}
}
}
url = url.replace(" ", "%20");
return url;
}
class MyRetryPolicy implements RetryPolicy
{
/** The current timeout in milliseconds. */
private int mCurrentTimeoutMs;
/** The current retry count. */
private int mCurrentRetryCount;
/** The maximum number of attempts. */
private final int mMaxNumRetries;
/** The backoff multiplier for for the policy. */
private final float mBackoffMultiplier;
/** The default socket timeout in milliseconds */
public static final int DEFAULT_TIMEOUT_MS = 2500;
/** The default number of retries */
public static final int DEFAULT_MAX_RETRIES = 1;
/** The default backoff multiplier */
public static final float DEFAULT_BACKOFF_MULT = 1f;
/**
* Constructs a new retry policy using the default timeouts.
*/
public MyRetryPolicy()
{
this(DEFAULT_TIMEOUT_MS, DEFAULT_MAX_RETRIES, DEFAULT_BACKOFF_MULT);
}
/**
* Constructs a new retry policy.
*
* @param initialTimeoutMs
* The initial timeout for the policy.
* @param maxNumRetries
* The maximum number of retries.
* @param backoffMultiplier
* Backoff multiplier for the policy.
*/
public MyRetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier)
{
mCurrentTimeoutMs = initialTimeoutMs;
mMaxNumRetries = maxNumRetries;
mBackoffMultiplier = backoffMultiplier;
}
/**
* Returns the current timeout.
*/
@Override
public int getCurrentTimeout()
{
return mCurrentTimeoutMs;
}
/**
* Returns the current retry count.
*/
@Override
public int getCurrentRetryCount()
{
return mCurrentRetryCount;
}
/**
* Prepares for the next retry by applying a backoff to the timeout.
*
* @param error
* The error code of the last attempt.
*/
@Override
public void retry(VolleyError error) throws VolleyError
{
mCurrentRetryCount++;
mCurrentTimeoutMs += (mCurrentTimeoutMs * mBackoffMultiplier);
if (!hasAttemptRemaining())
{
throw error;
} else
{
try
{
Thread.sleep(800);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
/**
* Returns true if this policy has attempts remaining, false otherwise.
*/
protected boolean hasAttemptRemaining()
{
return mCurrentRetryCount <= mMaxNumRetries;
}
}
}
相关文章推荐
- 使用zlib模块实现HTTP服务端与客户端实现传输数据压缩
- A Python guide to handling HTTP request failures
- 手机移动网络是否连接
- http文件下载
- 类型安全的网络请求框架retrofit---1
- CentOS修改主机名和网络信息
- TCP/IP协议第一章阅读笔记
- 网络安全与病毒防范
- 双网卡实现内外网络同时使用
- UNIX网络编程卷一:调试工具 tcpdump lsof 总结
- 第二届全国高校SDN网络应用创新大赛获奖名单出炉
- TCP的拥塞机制
- TCP与UDP的不同接包处理方式
- casperjs无法加载https的网页
- NAT网络映射设置:允许局域网用户访问VMWare内linux的SSH
- 2015关于第十一届"蓝狐网络杯"湖南省大学生计算机程序设计竞赛的总结
- 人脸识别(稀疏表示、人工神经网络)
- ios开发进阶之网络05 NSURLConnection AFN
- [转载]使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
- HttpURLConnection发送POST请求(可包含文件)