EasyVolley
EasyVolley庫是Google Volley的改良版本,它簡化了請求參數處理,添加對文件的上傳及下載的支持,其他相似庫,例如VolleyPlus等,它們是把要上傳及下載的東西,全部讀取到內存,然後再發送出去或保存到文件,這必然會出現內存損耗過多的問題,如果是大文件,手機必然處理不過來。
用法
普通請求
RequestParams params = new RequestParams();
params.addBodyParameter("session_id", "4095c7d3c0c9240aa6975044");
params.addBodyParameter("birthday", "1986-01-01");
String url = "http://yourhost/index.php?act=User&m=updateProfile";
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
request.setRequestParams(params);
request.setTag(TAG);
mRequestQueue.add(request);
文件上傳請求
RequestParams params = new RequestParams();
params.addBodyParameter("session_id", "4095c7d3c0c9240aa6975044");
params.addBodyParameter("hello_video", new File("/sdcard/20150914_153044.mp4"));
params.addBodyParameter("hello_pic", new File("/sdcard/20150914_153044.jpg"));
String url = "http://yourhost/index.php?act=ActorSetting&m=updateVideo";
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
request.setLoadingListener(new Response.LoadingListener() {
@Override
public void onLoading(boolean isUpload, long total, long current) {
Log.e(TAG, "isUpload:" + isUpload + ",total:" + total + ",current:" + current);
}
});
request.setRequestParams(params);
request.setTag(TAG);
mRequestQueue.add(request);
文件下載請求
文件下載支持斷點續傳機制,參數autoResume
DownloadRequest(int method, String url, String fileSavePath, boolean autoResume,
Response.Listener<File> listener, Response.ErrorListener errorListener);
String url = "http://yourhost/ff.apk";
DownloadRequest request = new DownloadRequest(Request.Method.GET, url, "/sdcard/out.apk", false, new Response.Listener<File>() {
@Override
public void onResponse(File response) {
Log.e(TAG, "download finish:" + response.getAbsolutePath());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
request.setLoadingListener(new Response.LoadingListener() {
@Override
public void onLoading(boolean isUpload, long total, long current) {
Log.e(TAG, "isUpload:" + isUpload + ",total:" + total + ",current:" + current);
}
});
request.setTag(TAG);
mRequestQueue.add(request);
取消請求
你可以在任何地方使用如下方法取消請求。
request.cancel();
或者使用TAG來取消請求。當你的Activity要被Destory時,把該Activity的相關請求取消掉,是一個相當好的習慣!
mRequestQueue.cancelAll(TAG);